Я новичок в Kotlin и в настоящее время использую v1.3.31 в POC разработки комплекта OSGI. В настоящее время я использую процессоры аннотаций для генерации деклараций манифеста OSGI и пытаюсь найти эквивалент Котлина из следующего:
@ObjectClassDefinition(name="Config", description = "Sample Config")
public static @interface Config {
@AttributeDefinition(name = "A parameter", description = "Configurable param")
String myParameter() default "";
}
Учитывая, что эти аннотации OSGI создаются как:
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.TYPE)
public @interface ObjectClassDefinition
/*....*/
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.METHOD)
public @interface AttributeDefinition
Самое близкое, что я могу получить в Kotlin, - это использование аннотации @ObjectClassDefinition
для public annotation class
, но поскольку классы аннотаций Kotlin не поддерживают членов, я не могу использовать @AttributeDefinition
для члена класса.
- Я пытался использовать только Kotlin
class
или interface
, но процессор аннотаций не допускает никаких классов без аннотаций.
- Я также пытался создать
java.lang.Annotation
в Kotlin, чтобы обойти это поведение, но компилятор не допустит этого.
Текущая частично работающая реализация, и вот последний работающий GitHub source. :
@ObjectClassDefinition(name = "Sample Kotlin servlet",
description = "Simple Kotlin servlet with configurable properties")
public annotation class Config (
val value : String = "hello"
)
Я заметил, что аннотации могут быть особенно хитрыми в Kotlin. Любое понимание очень ценится!