Implementar anotación (/ hereda / ~ extender) en Kotlin

Roland:

En Java tengo la posibilidad de anotaciones "poner en práctica".

Muestra la anotación de Java:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface JavaClassAnno {
  String[] value();
}

Java de ejemplo "aplicación":

class MyAnnotationLiteral 
                  extends AnnotationLiteral<JavaClassAnno> 
                  implements JavaClassAnno { // <--- works in Java
  private String value;

  public MyAnnotationLiteral(String value) {
    this.value = value;
  }
  @Override
  public String[] value() {
    return new String[] { value };
  }
}

Tratando de puerto que a Kotlin no funciona, ya que dice que la anotación es definitiva y por lo tanto no puede ser hereditaria, es decir, el siguiente no funcionará:

class MyAnnotationLiteral(private val internalValue: String) 
                 : AnnotationLiteral<JavaClassAnno>(), 
                   JavaClassAnno { // <--- doesn't work in Kotlin (annotation can not be inherited)
  override fun value(): Array<String> {
    return arrayOf(internalValue)
  }
}

¿Cómo se "implementa / extender" la forma anotaciones Kotlin? No se pudo encontrar ninguna razón por la cual se diferencia en que Kotlin respecto a Java. Cualquier indicio de cómo resolver ese problema o cualquier fuente que le dicen por qué es de esa manera son bienvenidos.

La siguiente pregunta contiene un caso de uso de esta constelación: dinámicamente evento CDI fuego con clasificación con los miembros . Básicamente, usted necesita algo como esto para reducir el calificador debe dar lugar a la base de sus miembros.

Tenga en cuenta que esto también se aplicaría a una anotación de Kotlin, así como parece que una anotación de Kotlin no puede ser abierto y por lo tanto no puede implementar / extendido demasiado.

Lo que he encontrado hasta ahora es bastante mencionar @Inheritedcomo problema:

Pero no he encontrado ninguna razón por la anotación no es implementable / heredable, ya que es en Java.

También hice esta pregunta ahora aquí: https://discuss.kotlinlang.org/t/implement-inherit-extend-annotation-in-kotlin/8916

Actualización: Finalmente he encontrado algo con respecto a esta decisión de diseño, es decir, el problema siguiente (mientras se estaba abriendo mi propio problema para ella): Anotaciones herencia. Prohibir o poner en práctica correctamente . Como parece que la decisión era "prohibir" que, a pesar de que no hay visibles (?) Comentarios, discusiones u otras fuentes sobre esa decisión.

Añadido el problema siguiente: https://youtrack.jetbrains.com/issue/KT-25947

Andrey Breslav:

A partir de Kotlin 1.3, no se admite este caso. Para crear variaciones propias de las anotaciones que uno tiene que recurrir a Java por ahora. Una de las razones de esta decisión es que el diseño de interfaces hacer anotaciones JVM es demasiado específica y no asignar así a otras plataformas.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=137324&siteId=1
Recomendado
Clasificación