public class MyInit {
/**
* 初始化默认自定义类对象
* @param clazz
* @return
* @throws ClassNotFoundException
* @throws NoSuchMethodException
* @throws InvocationTargetException
* @throws InstantiationException
* @throws IllegalAccessException
*/
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();
/**
* 被final修饰的field不做任何处理
*/
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<>());
}
/**
* 核心类库加载器会返回 null, 为jdk类
* 核心类库加载器会返回:非null, 为自定义类
*/
else if (fieldType.getClassLoader()!=null) {
field.set(o, initCustomClass(fieldType));
}
}
return o;
}
public static void main(String[] args) throws ClassNotFoundException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
// 假设一个自定义类 A
final Object o = initCustomClass(A.class);
if (o instanceof A) {
A a= (A) o;
System.out.println(a.toString());
}
}
}
使用Java反射实现初始化默认自定义类对象的通用方法
最新推荐文章于 2025-05-11 15:00:00 发布
本文介绍了如何使用Java编程初始化一个默认的自定义类对象,包括设置字符串、布尔值、整数等基础类型字段,以及处理final修饰的字段和使用核心类库加载的自定义类。
5万+

被折叠的 条评论
为什么被折叠?



