示例1
import lombok.Data;
import org.junit.jupiter.api.Test;
import java.lang.reflect.Field;
public class TestJava {
@Data
public static class UserInfo {
private String name;
}
@Test
public void test_01() throws NoSuchFieldException, IllegalAccessException {
UserInfo userInfo = new UserInfo();
userInfo.setName("李白");
Field field = UserInfo.class.getDeclaredField("name");
System.out.println(field.getType()); // 返回类型 Class<?>
// 以上代码输出: class java.lang.String
System.out.println(field.getGenericType()); // 返回 Type
// 以上代码输出: class java.lang.String
System.out.println(field.getName()); // 返回类型 String
// 以上代码输出: name
System.out.println((String)field.get(userInfo)); // 获取 userInfo 中 name 字段的值
// 以上代码输出: 李白
}
}
示例2
package org.example;
import lombok.Data;
import org.junit.jupiter.api.Test;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
public class TestJava {
@Data
public static class DataHolder<T> {
private T data;
}
@Test
public void test_01() throws NoSuchFieldException, IllegalAccessException {
DataHolder<String> dataHolder = new DataHolder<>();
dataHolder.setData("李白");
Field field = DataHolder.class.getDeclaredField("data");
System.out.println(field.getType()); // 返回类型 Class<?>
// 以上代码输出: class java.lang.Object
System.out.println(field.getGenericType()); // 返回类型 Type
// 以上代码输出: T
System.out.println(field.getGenericType() instanceof ParameterizedType);
// 以上代码输出: false
System.out.println(field.getName()); // 返回类型 String
// 以上代码输出: data
System.out.println((String)field.get(dataHolder)); // 获取 dataHolder 中 data 字段的值
// 以上代码输出: 李白
}
}
示例3
import lombok.Data;
import org.junit.jupiter.api.Test;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class TestJava {
@Data
public static class DataListHolder<T> {
private List<T> dataList;
}
@Test
public void test_01() throws NoSuchFieldException, IllegalAccessException {
DataListHolder<String> dataListHolder = new DataListHolder<>();
dataListHolder.setDataList(new ArrayList<>());
dataListHolder.getDataList().add("李白");
Field field = DataListHolder.class.getDeclaredField("dataList");
System.out.println(field.getType()); // 返回类型 Class<?>
// 以上代码输出: interface java.util.List
System.out.println(field.getGenericType()); // 返回类型 Type
// 以上代码输出: java.util.List<T>
System.out.println(field.getGenericType() instanceof ParameterizedType);
// 以上代码输出: true
if (field.getGenericType() instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) field.getGenericType();
System.out.println(parameterizedType.getRawType());
// 以上代码输出: interface java.util.List
System.out.println(parameterizedType.getOwnerType());
// 以上代码输出: null
System.out.println(Arrays.toString(parameterizedType.getActualTypeArguments()));
// 以上代码输出:[T]
}
System.out.println(field.getName()); // 返回类型 String
// 以上代码输出: dataList
System.out.println(field.get(dataListHolder)); // 获取 dataListHolder 中 dataList 字段的值
// 以上代码输出: [李白]
}
}
示例4
package org.example;
import lombok.Data;
import org.junit.jupiter.api.Test;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class TestJava {
@Data
public static class DataListHolder {
private List<String> dataList;
}
@Test
public void test_01() throws NoSuchFieldException, IllegalAccessException {
DataListHolder dataListHolder = new DataListHolder();
dataListHolder.setDataList(new ArrayList<>());
dataListHolder.getDataList().add("李白");
Field field = DataListHolder.class.getDeclaredField("dataList");
System.out.println(field.getType()); // 返回类型 Class<?>
// 以上代码输出: interface java.util.List
System.out.println(field.getGenericType()); // 返回类型 Type
// 以上代码输出: java.util.List<java.lang.String>
System.out.println(field.getGenericType() instanceof ParameterizedType);
// 以上代码输出: true
if (field.getGenericType() instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) field.getGenericType();
System.out.println(parameterizedType.getRawType());
// 以上代码输出: interface java.util.List
System.out.println(parameterizedType.getOwnerType());
// 以上代码输出: null
System.out.println(Arrays.toString(parameterizedType.getActualTypeArguments()));
// 以上代码输出:[class java.lang.String]
}
System.out.println(field.getName()); // 返回类型 String
// 以上代码输出: dataList
System.out.println(field.get(dataListHolder)); // 获取 dataListHolder 中 dataList 字段的值
// 以上代码输出: [李白]
}
}