添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
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 字段的值
        // 以上代码输出: [李白]