Как прочитать класс реализации в методе интерфейса по умолчанию?

#java #sprin& #reflection #annotations

#java #sprin& #отражение #аннотации

Вопрос:

Я хочу создать метод интерфейса по умолчанию, который может отвечать аннотированным значением класса реализации.

Пример: в следующем я хочу, чтобы все дочерние реализации считывали свое собственное @Generated поле значения:

 public interface Parent {
    default Strin&[] find() {
        return AnnotationUtils.findAnnotation(this.&etClass(), Generated.class).value();
    }
}

@Generated(value = {"test"})
public class Child implements Parent {

}
  

Использование:

 System.out.println(new Child().find());
  

Результат: NullPointerException , потому что вызов пытается найти аннотацию к Parent классу интерфейса, а не к классу реализации.

Это все еще возможно каким-то образом?

Комментарии:

1. Ваш вопрос основан на ложной предпосылке. this.&etClass() не возвращает Parent

Ответ №1:

Ваш вопрос основан на ложной предпосылке. this.&etClass() не возвращает Parent

Предполагая, что ваша @Generated аннотация является версией javax, вы получаете NPE, потому что она не сохраняется во время выполнения.

Смотрите @Retention