J'essaie de comprendre comment référencer une interface paramétrés comme un attribut d'annotation:Référencer un type paramétrées d'une annotation
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");
}
}
Le code ci-dessus échoue avec un décalage de type sur l'annotation @ServiceType
. Je crois que le problème est avec les limites que j'ai indiquées pour l'attribut value
. J'ai aussi remarqué que quand un type n'est pas générique ça fonctionne bien; par exemple. @ServiceType(IntegerService.class)
travaux donnés:
public class IntegerService extends BaseServiceImpl<Integer> { /* ... */ }
Qu'est-ce que je manque pour obtenir le débarrasser de l'erreur de décalage en essayant de fournir le type générique?