private static Object instantiateFieldType(Field field) { Class<?> fieldType = field.getType(); Object defaultValue; int modifiers = fieldType.getModifiers(); if(fieldType.isAssignableFrom(ClassLoader.class) || isClass(fieldType)) { defaultValue = null; } else if (Modifier.isAbstract(modifiers) && !Modifier.isInterface(modifiers) && !fieldType.isArray()) { Class<?> createConcreteSubClass = new ConcreteClassGenerator().createConcreteSubClass(fieldType); defaultValue = createConcreteSubClass == null ? null : Whitebox.newInstance(createConcreteSubClass); } else { fieldType = substituteKnownProblemTypes(fieldType); defaultValue = Whitebox.newInstance(fieldType); } return defaultValue; }