1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodHandles.Lookup;
import java.lang.invoke.MethodType;
import java.util.Set;
import org.reflections.Reflections;
public class Exemple {
public static void main(String[] args) {
Reflections reflections = new Reflections("my.packages");
Set<Class<? extends AbstractTruc>> subTypes = reflections.getSubTypesOf(AbstractTruc.class);
Lookup lookup = MethodHandles.publicLookup();
for (Class<?> c : subTypes) {
System.out.println(c.getName());
try {
MethodHandle constructor = lookup.findConstructor(c, MethodType.methodType(void.class, int.class));
AbstractTruc instance = (AbstractTruc) constructor.invoke(0);
System.out.println("With constructor (int) " + instance);
} catch (NoSuchMethodException e) {
System.out.println("No constructor (int)");
} catch (Throwable e) {
e.printStackTrace();
}
try {
MethodHandle constructor = lookup.findConstructor(c,
MethodType.methodType(void.class, int.class, String.class));
AbstractTruc instance = (AbstractTruc) constructor.invoke(0, "test");
System.out.println("With constructor (int,String) " + instance);
} catch (NoSuchMethodException e) {
System.out.println("No constructor (int,String)");
} catch (Throwable e) {
e.printStackTrace();
}
try {
MethodHandle constructor = lookup.findConstructor(c,
MethodType.methodType(void.class, int.class, String.class, int.class));
AbstractTruc instance = (AbstractTruc) constructor.invoke(0, "test", 1);
System.out.println("With constructor (int,String,int) " + instance);
} catch (NoSuchMethodException e) {
System.out.println("No constructor (int,String,int)");
} catch (Throwable e) {
e.printStackTrace();
}
}
}
} |
Partager