Java 通过 getClass 获取对象对应的类
Java:Type、Object、Class 的关系
Java 通过 Class isAssignableFrom 方法判断类的父子关系
Java 通过 Class 的 getName 、getSimpleName、getCanonicalName 获取类名
Java:通过 Class isPrimitive 方法为原始类型
Java 通过 getComponentType 获取数组对象的元素类型
Java Type 接口
Java ParameterizedType 接口
Java 反射:Type 、ParameterizedType、TypeVariable 、WildcardType、GenericArrayType
Java 反射
Java 通过反射生成类的对象
Java 反射:获取对象字段值与类型
Java 反射:Field 类 getType 和 getGenericType 的异同
Java 反射:使用 getFields 和 getDeclaredFields 获取类的字段列表
Java 反射:通过 Modifier 的方法判断字段和函数的访问修饰符
Java 反射:判断字段是否为 static
Java 反射:修改 final 字段值
Java 泛型
Java 泛型:泛型类
Java 泛型:泛型函数
Java 通过 Class isArray 方法判断对象是否为数组
Java 通过 instanceof 判断对象类型
Java 反射:获取对象字段值与类型
#Java 反射、泛型与注解
@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 字段的值
// 以上代码输出: 李白
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 字段的值
// 以上代码输出: 李白
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 字段的值
// 以上代码输出: [李白]
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 字段的值
// 以上代码输出: [李白]