Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Annotations: restrict reference to classes with a annotation

I think this is not possible, but maybe I'm wrong. So I ask you, if it is possible. ;-)

If I define a annotation that accept only class references which extends some interface or class that is possible:

 Class<? extends ServiceProviderIF> serviceIFProvider();

At this annotation I only can add some class which extends ServiceProviderIF. My question: is such a definition also possible for another annotation? That means with pseudocode something like this

 Class<? contains AnnotationXYZ> classReferences();

AnnotationXYZ is another annotation definition. And the class which should be added is only accepted by containing this Annotation.

TIA and best regards, Oli

like image 355
nauni77 Avatar asked Aug 31 '25 01:08

nauni77


2 Answers

It's impossible. Annotation can be set on any type (class, interface), but Java method can't return a multi-type containing types from different hierarchies. In other words, you should place all your classes that have annotation AnnotationXYZ in the same hierarchy under some interface or class Blabla, then use type <? extends Blabla> wildcard.

like image 138
Michael Spector Avatar answered Sep 03 '25 22:09

Michael Spector


No, it's not possible. Only types are accepted in generic types. And annotations don't define types.

like image 28
JB Nizet Avatar answered Sep 03 '25 22:09

JB Nizet