首页 文章

Kotlin的Java注释实现

提问于
浏览
2

我试图复制@Age约束的实现(在网上找到它)从Java到Kotlin,我复制了java代码库并使用IDE转换它的Kotlin代码 .

Java代码

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Repeatable(Age.List.class)
@Documented
@Constraint(validatedBy = { })
public @interface Age {
    String message() default "Must be greater than {value}";
    Class<?>[] groups() default { };
    Class<? extends Payload>[] payload() default { };
    long value();
    @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
    @Retention(RUNTIME)
    @Documented
    @interface List {
        Age[] value();
    }
}

Intellij生成的相应Kotlin代码

@Target(AnnotationTarget.*)  
@Retention(RUNTIME)  
@Repeatable(Age.List::class)  
@Documented  
@Constraint(validatedBy = arrayOf())  
annotation class Age(  
  val value: Long,  
  val message: String = "Must be greater than {value}",  
  val groups: Array<KClass<*>> = arrayOf(),  
  val payload: Array<KClass<out Payload>> = arrayOf()) { 

  @Target(AnnotationTarget.FUNCTION,  
    AnnotationTarget.PROPERTY_GETTER,  
    AnnotationTarget.PROPERTY_SETTER,  
    AnnotationTarget.FIELD,  
    AnnotationTarget.ANNOTATION_CLASS,  
    AnnotationTarget.CONSTRUCTOR,  
    AnnotationTarget.VALUE_PARAMETER,  
    AnnotationTarget.TYPE)  
  @Retention(RUNTIME)  
  @Documented  
  annotation class List(vararg val value: Age)  
}

Kotlin代码导致错误,指出“注释类中不允许成员” . 将注释类列表从Age移出应解决问题吗?有没有其他方法在另一个中实现注释类?

谢谢 .

1 回答

  • 2

    是的,您需要将 List 移出 Age . 在未来的Kotlin版本中很可能会删除对注释中嵌套类的限制;它更多的是设计疏忽而不是基本问题 .

相关问题