Java 如何通过反射确定字段是否为类型的实例?
我想通过反射找出字段是否是某种类型的实例Java 如何通过反射确定字段是否为类型的实例?,java,reflection,Java,Reflection,我想通过反射找出字段是否是某种类型的实例T 假设我有一个对象o。现在我想知道它是否有任何字段是T的实例。我可以使用以下工具获取所有字段: o.getClass().getFields(); 我可以通过以下方式获取字段的类型: field.getType(); 但现在我想知道这个类型或任何超类型是否等于T。我必须递归调用getSuperclass()以确保检查所有超类型吗?您必须使用。名称相当夸张的类。isAssignableFrom就是您要找的。我通常不得不阅读javadoc,以确保正确理解
T
假设我有一个对象o
。现在我想知道它是否有任何字段是T
的实例。我可以使用以下工具获取所有字段:
o.getClass().getFields();
我可以通过以下方式获取字段的类型:
field.getType();
但现在我想知道这个类型或任何超类型是否等于
T
。我必须递归调用getSuperclass()
以确保检查所有超类型吗?您必须使用。名称相当夸张的类。isAssignableFrom
就是您要找的。我通常不得不阅读javadoc,以确保正确理解:
确定类或接口
由该类对象表示的是
要么与超类相同,要么是超类
或上级,阶级或
由指定的
类参数。如果
所以否则返回false。如果
该类对象表示一个
基元类型,此方法返回
如果指定的类参数
就是这个类对象;
否则返回false
具体地说,这种方法测试
由
指定的类参数可以是
已转换为表示为的类型
该类通过一个标识创建对象
转换或通过加宽参照
转换
例如:
public class X {
public int i;
public static void main(String[] args) throws Exception {
Class<?> myType = Integer.class;
Object o = new X();
for (Field field : o.getClass().getFields()) {
if (field.getType().isAssignableFrom(myType)) {
System.out.println("Field " + field + " is assignable from type " + o.getClass());
}
}
}
}
公共类X{
公共国际一级;
公共静态void main(字符串[]args)引发异常{
类myType=Integer.Class;
对象o=新的X();
for(字段:o.getClass().getFields()){
if(field.getType().isAssignableFrom(myType)){
System.out.println(“字段”+Field+”可从类型“+o.getClass())赋值);
}
}
}
}
如果要比较自定义类的字段类型,请尝试以下操作:,
使用.class,因为只有基元类型具有.TYPE
如果(field.getType().isAssignableFrom(**YOURCLASS.class**)){}
在NullPointerException
的情况下,您可以使用而不是也可以在同一文档中查看isInstance应该是Integer.class代码>