Field getType() 和 getGenericType() 的区别
Field
类提供了两个方法:getType()
和getGenericType()
。这两个方法用于获取字段的类型,但它们的用途和返回值有所不同。
1. getType()
- 返回类型:返回一个
Class<?>
对象,表示字段的具体类型。 - 用途:用于获取字段的原始类型,不考虑泛型信息。
- 示例:
Field field = SomeClass.class.getDeclaredField("someField"); Class<?> fieldType = field.getType(); // 返回字段的原始类型
2. getGenericType()
- 返回类型:返回一个
Type
对象,可以是Class
、ParameterizedType
或GenericArrayType
等,表示字段的泛型类型。 - 用途:用于获取字段的泛型信息,包括参数化类型。
- 示例:
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