@Roland Я думаю, что это хорошая дискуссия для нашего публичного Slack или форума.

a у меня есть возможность «реализовывать» аннотации.

Примерная аннотация Java:

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

Пример Java "реализации":

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 };
  }
}

Попытка перенести это на Kotlin не работает, так как он говорит, что аннотация является окончательной и, следовательно, не может быть унаследована, то есть следующее не будет работать:

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)
  }
}

Как вы «внедряете / расширяете» аннотации способом Kotlin? Не удалось найти причину, почему Котлин отличается в этом отношении от Java. Любой намек на то, как решить эту проблему или любые источники, которые говорят, почему это так, приветствуются.

Следующий вопрос содержит пример использования этого созвездия:Динамически запустить событие CDI с квалификатором с членами, По сути, вам нужно что-то подобное, чтобы сузить, какой классификатор должен срабатывать в зависимости от его членов.

Обратите внимание, что это также относится к аннотации Kotlin, так как кажется, что аннотация Kotlin не может быть открыта и, следовательно, также не может быть реализована / расширена.

То, что я нашел до сих пор, довольно упоминание@Inherited как проблема:

https://discuss.kotlinlang.org/t/inherited-annotations-and-other-reflections-enchancements/6209https://youtrack.jetbrains.com/issue/KT-22265

Но я не нашел никакой причины, по которой аннотация не может быть реализована / унаследована, как в Java.

Я также задал этот вопрос сейчас здесь:https://discuss.kotlinlang.org/t/implement-inherit-extend-annotation-in-kotlin/8916

Обновление: Наконец-то я нашел кое-что относительно этого решения о дизайне, а именно следующую проблему (пока я открывал для нее собственную проблему):Аннотации наследования. Либо запрещать, либо внедрять правильно, Похоже, что решение было «запретить» его, хотя нет никаких (видимых?) Комментариев, обсуждений или других источников об этом решении.

Добавлена ​​следующая проблема:https://youtrack.jetbrains.com/issue/KT-25947

Ответы на вопрос(1)

Ваш ответ на вопрос