Я пытаюсь выяснить, как ссылаться на параметризованный интерфейс как атрибут аннотации:
public class Example {
public interface MyService<T extends Number> {
T someNumber();
}
public class BaseServiceImpl<T extends Number> implements MyService<T> {
@Override
public T someNumber() {
return null;
}
}
public @interface ServiceType {
Class<? extends MyService<?>> value();
}
@ServiceType(BaseServiceImpl.class)
public static void main(String[] args) {
System.out.println("Hello World");
}
}
Приведенный выше код завершается с ошибкой типа в аннотации @ServiceType
. Я считаю, что проблема в границах, которые я указал для атрибута value
. Я также заметил, что когда тип не является универсальным, он работает нормально; например @ServiceType(IntegerService.class)
дано работ:
public class IntegerService extends BaseServiceImpl<Integer> { /* ... */ }
Чего мне не хватает, чтобы избавиться от ошибки несоответствия при попытке указать универсальный тип?