I get the class type of the nested classes in debug mode, but I can' t create an instance to initialize in the next step the Fields of the nested instance. (See my comented lines). So my Unit test fails with Error.
public class Reflector {
public static <T> T initialize(Class<? extends T> clazz) {
try {
Object classInstance = clazz.newInstance();
System.out.println("MainclassInstance: "+ classInstance.toString());
for (Field field : clazz.getDeclaredFields()) {
System.out.println(
"\n### 1. For-Schleife\nclazz.getDeclaredFields().size(): " + clazz.getDeclaredFields().length);
System.out.println("clazz.field: " + field.getName());
//Class Object
if (field.getType().isMemberClass()) {
Object memberClassInstance = field.getType(); //Nested$FirstNested
System.out.println("memberClassInstance: " + memberClassInstance.toString()); //Nested$FirstNested
List<Field> memberClassFields = Arrays.asList(((Class<?>) memberClassInstance).getDeclaredFields());
for (int memberFieldIndex = 0; memberFieldIndex < memberClassFields.size() - 1; memberFieldIndex++) {
System.out.println("meberClassField: " + memberClassFields.get(memberFieldIndex).getName());
//memberClassFields.get(memberFieldIndex).set(memberClassInstance, "nestedField");
}
//field.set(memberClassInstance, "MyObject");
//field.set(classInstance, memberClassInstance);
}
}
return (T) classInstance;
} catch (SecurityException | IllegalArgumentException e) {
e.printStackTrace();
} catch (InstantiationException ex) {
Logger.getLogger(Reflector.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(Reflector.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
This is the JUnit test class
public class ReflectorTest {
@Test
public void testInitializeNestedObject() {
Nested actual = Reflector.initialize(Nested.class);
assertNotNull(actual);
assertNotNull(actual.nested1);
assertTrue(actual.nested1 instanceof Nested.FirstNested);
assertNotNull(actual.nested1.nestedField1);
assertNotNull(actual.nested1.nestedField2);
assertNotNull(actual.nested2);
assertTrue(actual.nested2 instanceof Nested.SecondNested);
assertNotNull(actual.nested2.nestedField3);
assertNotNull(actual.nested2.nestedField4);
}
}
This is the class for data
public class Nested {
public class FirstNested{
public Object nestedField1;
public Object nestedField2;
}
public class SecondNested{
public Object nestedField3;
public Object nestedField4;
}
public FirstNested nested1;
public SecondNested nested2;
}