用Kotlin中的成员表达Java注释类

时间:2019-05-14 19:13:48

标签: java kotlin osgi apache-felix

我是Kotlin的新手,目前在OSGI软件包开发POC中使用v1.3.31。我目前正在使用注释处理器来生成OSGI清单声明,并且试图找到以下内容的 Kotlin等效

@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 classinterface,但是注释处理器将不允许任何非注释类。
  • 我还尝试在Kotlin中创建一个java.lang.Annotation来绕过此行为,但是编译器不允许这样做。

当前部分可行的实现,这是最新的有效GitHub source.

@ObjectClassDefinition(name = "Sample Kotlin servlet",
            description = "Simple Kotlin servlet with configurable properties")
    public annotation class  Config (
        val value : String = "hello"
    )

我注意到注释在Kotlin中可能特别棘手。任何见解都将不胜感激!

1 个答案:

答案 0 :(得分:1)

@ObjectClassDefinition(
    name = "Sample Kotlin servlet",
    description = "Simple Kotlin servlet with configurable properties")
annotation class  Config (
  @get:AttributeDefinition(name = "A parameter", description = "Configurable param")
  val value : String = "hello")

(“公共”似乎没有任何作用)。 有关详细信息,请参见此文档annotation-use-site-targets