Wenn ichWarum findet reflections.getSubTypesOf (Object.class) keine Enums?
habenReflections reflections = new Reflections("my.package", classLoader, new SubTypesScanner(false));
dann findet diese meine Enum-Klassen
Set<Class<? extends Enum>> enums = reflections.getSubTypesOf(Enum.class);
aber nicht
Set<Class<?>> classes = reflections.getSubTypesOf(Object.class);
dies Gibt es einen Grund für?
Reproduzierbare Beispiel:
package cupawntae;
import org.reflections.Reflections;
import org.reflections.scanners.SubTypesScanner;
public class Reflector {
public static void main(String[] args) {
Reflections reflections = new Reflections("cupawntae", Reflector.class.getClassLoader(), new SubTypesScanner(false));
System.out.println("Objects: " + reflections.getSubTypesOf(Object.class));
System.out.println("Enums: " + reflections.getSubTypesOf(Enum.class));
System.out.println("Enum's superclass: " + Enum.class.getSuperclass());
}
}
Enum Klasse:
package cupawntae;
public enum MyEnum {
}
Ausgang:
Objects: [class cupawntae.Reflector]
Enums: [class cupawntae.MyEnum]
Enum's superclass: class java.lang.Object
wie ein Bug Looks gefunden. Beachten Sie, dass das enum, wenn es eine Schnittstelle implementiert, plötzlich gefunden wird. Bis der Fehler behoben ist, können Sie z. 'ClassPath.from (ClassLoader.getSystemClassLoader()). GetTopLevelClasses (" cupawntae ")' von Google Guava. Nicht so glatt, aber erledigt den Job. –
Danke, aber sieht aus wie es dokumentiert ist - obwohl das an der Schnittstelle Sache seltsam ist. Wie hast du das entdeckt? Haben Sie zufällig eine Schnittstelle in Ihrem Zielpaket implementiert? – CupawnTae