Field getType() 和 getGenericType() 的区别

Field类提供了两个方法:getType()getGenericType()。这两个方法用于获取字段的类型,但它们的用途和返回值有所不同。

1. getType()

  • 返回类型:返回一个Class<?>对象,表示字段的具体类型。
  • 用途:用于获取字段的原始类型,不考虑泛型信息。
  • 示例
    Field field = SomeClass.class.getDeclaredField("someField");
    Class<?> fieldType = field.getType(); // 返回字段的原始类型
    

2. getGenericType()

  • 返回类型:返回一个Type对象,可以是ClassParameterizedTypeGenericArrayType等,表示字段的泛型类型。
  • 用途:用于获取字段的泛型信息,包括参数化类型。
  • 示例
    Field field = SomeClass.class.getDeclaredField("someGenericField");
    Type genericFieldType = field.getGenericType(); // 返回字段的泛型类型
    

3. 示例


import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;

class MyClass {
    List<String> myList;
}

public class Main {
    public static void main(String[] args) throws NoSuchFieldException {
        Field field = MyClass.class.getDeclaredField("myList");
        Type genericType = field.getGenericType();
        System.out.println("泛型类型:" + genericType);
        
        if (genericType instanceof ParameterizedType) {
            ParameterizedType paramType = (ParameterizedType) genericType;
            Type[] actualTypeArguments = paramType.getActualTypeArguments();
            for (Type type : actualTypeArguments) {
                System.out.println("泛型参数:" + type.getTypeName());
            }
        }
    }
}
泛型类型:java.util.List<java.lang.String>
泛型参数:java.lang.String

4. 总结

  • getType():获取字段的具体类类型,忽略泛型。
  • getGenericType():获取字段的泛型类型,能够提供更详细的类型信息。

参考:DeepSeek

posted @ 2025-05-31 23:06  Higurashi-kagome  阅读(75)  评论(0)    收藏  举报