Skip to content

Java 使用反射对 List<T> 类型的属性赋值

🏷️ Java 泛型

判断是否是 List 类型:

java
if (field.getType().isAssignableFrom(List.class))

生成实例并赋值:

java
Type fc = field.getGenericType(); // 得到其 Generic 的类型
if (fc == null) continue;

if (fc instanceof ParameterizedType) // 如果是泛型参数的类型
{
    ParameterizedType pt = (ParameterizedType) fc;
    Class genericClazz = (Class) pt.getActualTypeArguments()[0]; // 得到泛型里的 class 类型对象。

    if (genericClazz.isPrimitive() || genericClazz.getName().startsWith("java.lang")) { // 是基本类型或 java.lang 包中的类型
        // do something
    } else { // 自定义的类型
        // 使用 genericClazz.newInstance() 创建对应的实例
        // 使用 genericClazz.getDeclaredFields() 获取所有 Field,循环 Field 赋值
    }
}