I have encountered a somewhat strange behaviour. I use annotations to mark certain classes with a particular purpose, and then I use org.reflections library to find all the classes with the particular annotation. However when a class implements a method that returns a lambda function, the reflection won't find the annotated class anymore. The signature of the class is unchanged.
Example of annotation:
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String someValue();
}
Using the annotation:
@MyAnnotation(someValue = "a")
public class FooBar extends BaseClass {
@Override
public Consumer<Integer> doSomething() {
return null;
}
}
@MyAnnotation(someValue = "bazbar")
public class BarClass extends BaseClass {
@Override
public Consumer<Integer> doSomething(){
return (x) -> {};
}
}
Finding the annotations
private static final Reflections reflections = new Reflections("com.mypackage");
Set<Class<?>> clazzes = reflections.getTypesAnnotatedWith(MyAnnotation.class);
Now - the set 'clazzes' only contains 1 single class, the FooBar class. If I remove the lambda return value from the BazBar class that one too shows up, but as soon as one method in the class returns a lambda the reflection wont work.
I'm lost, any ideas?
Aucun commentaire:
Enregistrer un commentaire