Se hoPerché reflections.getSubTypesOf (Object.class) non trova enumerazioni?
Reflections reflections = new Reflections("my.package", classLoader, new SubTypesScanner(false));
allora questo trova il mio Enumera classi
Set<Class<? extends Enum>> enums = reflections.getSubTypesOf(Enum.class);
ma questo non
Set<Class<?>> classes = reflections.getSubTypesOf(Object.class);
C'è una ragione per questo?
esempio riproducibile:
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 classe:
package cupawntae;
public enum MyEnum {
}
uscita:
Objects: [class cupawntae.Reflector]
Enums: [class cupawntae.MyEnum]
Enum's superclass: class java.lang.Object
Sembra come un insetto. Notare che se l'enumerazione implementa qualsiasi interfaccia, viene improvvisamente trovata. Fino a quando il bug non viene corretto, puoi utilizzare ad es. 'ClassPath.from (ClassLoader.getSystemClassLoader()). GetTopLevelClasses (" cupawntae ")' di Google Guava. Non così sdolcinato, ma fa il lavoro. –
Grazie, ma sembra che sia documentato - anche se è strano riguardo all'interfaccia. Come l'hai scoperto? Hai per caso implementato un'interfaccia all'interno del tuo pacchetto target? – CupawnTae