Я пытаюсь выяснить, как ссылаться на параметризованные интерфейс как атрибут аннотаций:Реферирование параметризированный типа с аннотацией
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> { /* ... */ }
Что мне не хватает, чтобы получить избавиться от ошибки рассогласования при попытке поставить общий тип?