在 Java 中,**Field(字段)**通常指 java.lang.reflect.Field,用于反射获取类的成员变量。判断 Field 的“类型”一般有以下几种常见场景和需求:
通过 Field.getType() 或 Field.getGenericType() 判断。
Field field = clazz.getDeclaredField("name");
Class<?> type = field.getType();
if (type == String.class) {
// String 类型
} else if (type == int.class) {
// 基本类型 int
}
if (type.isPrimitive()) {
// int / long / boolean 等
}
isAssignableFrom)if (Number.class.isAssignableFrom(field.getType())) {
// Integer / Double / Long 等
}
if (List.class.isAssignableFrom(field.getType())) {
// List 及其子类
}
getType() 无法获取泛型,需要用 getGenericType()。
Field field = clazz.getDeclaredField("list");
Type genericType = field.getGenericType();
if (genericType instanceof ParameterizedType) {
ParameterizedType pt = (ParameterizedType) genericType;
Type actualType = pt.getActualTypeArguments()[0];
System.out.println(actualType); // class java.lang.String
}
int modifiers = field.getModifiers();
if (Modifier.isStatic(modifiers)) {
// 静态字段
}
if (Modifier.isFinal(modifiers)) {
// final 字段
}
if (field.isAnnotationPresent(Autowired.class)) {
// 有指定注解
}
Field field = obj.getClass().getDeclaredField("data");
if (List.class.isAssignableFrom(field.getType())
&& field.getGenericType() instanceof ParameterizedType) {
// 是 List 且有泛型
}
❌ 用 instanceof 判断 Field 类型
✅ 用 getType() / getGenericType()
❌ 认为 getType() 能拿到泛型
✅ 泛型必须用 getGenericType()
如果你是指 “如何判断一个变量的 Field 类型” 或 “MyBatis / Spring 中的 Field 判断”,可以告诉我具体场景,我可以给更针对性的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。