如何通过reflection找出一个字段是否是一个types的实例?
我想通过reflection找出一个字段是否是T
types的一个实例。
可以说我有一个对象o
。 现在我想知道它是否有任何字段是T
实例。 我可以得到所有的领域:
o.getClass().getFields();
我可以通过以下方式获取字段的types:
field.getType();
但是现在我想知道这个types或者超types是否等于T
我是否必须recursion调用getSuperclass()
以确保检查所有超types?
你必须使用isAssignableFrom 。
相当巴洛克式的Class.isAssignableFrom
就是你所追求的。 我通常最终不得不阅读javadoc,以确保我得到正确的方式:
确定此Class对象所表示的类或接口是否与指定的Class参数所表示的类或接口相同,或者是其所属类或接口的超类或超接口。 如果是的话,它返回true; 否则返回false。 如果此Class对象表示一个基本types,则此方法返回true,如果指定的Class参数恰好是此Class对象; 否则返回false。
具体而言,此方法testing指定Class参数表示的types是否可以通过标识转换或通过扩展参考转换转换为此Class对象表示的types。
例如:
public class X { public int i; public static void main(String[] args) throws Exception { Class<?> myType = Integer.TYPE; 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()); } } } }
如果要比较自定义类的字段types,则应该尝试使用.class,因为只有基本types具有.TYPE。
if(field.getType().isAssignableFrom(**YOURCLASS.class**)){}