public class MyInit {
public static Object initCustomClass(Class<?> clazz) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
final Constructor<?> aClassConstructor = clazz.getConstructor();
aClassConstructor.setAccessible(true);
final Object o = aClassConstructor.newInstance();
final Field[] declaredFields = clazz.getDeclaredFields();
for (Field field : declaredFields) {
field.setAccessible(true);
final Class<? extends Field> aClass = field.getClass();
final Class<?> fieldType = field.getType();
if ( Modifier.isFinal(field.getModifiers())) {
continue;
}
if (fieldType.equals(String.class) ) {
field.set(o, "");
} else if (fieldType.equals(Boolean.class)) {
field.set(o, false);
} else if (fieldType.equals(Integer.class)) {
field.set(o, 0);
} else if (fieldType.equals(Long.class)) {
field.set(o, 0L);
} else if (fieldType.equals(Date.class)) {
field.set(o, new Date());
} else if (fieldType.equals(List.class)) {
field.set(o, new ArrayList<>());
}
else if (fieldType.getClassLoader()!=null) {
field.set(o, initCustomClass(fieldType));
}
}
return o;
}
public static void main(String[] args) throws ClassNotFoundException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
final Object o = initCustomClass(A.class);
if (o instanceof A) {
A a= (A) o;
System.out.println(a.toString());
}
}
}