如果字段是某种类型的实例,我想通过反射找出T
.
让我们说我有一个对象o
.现在我想知道它是否有任何实例的字段T
.我可以得到所有领域:
o.getClass().getFields();
Run Code Online (Sandbox Code Playgroud)
我可以得到该字段的类型:
field.getType();
Run Code Online (Sandbox Code Playgroud)
但现在我想知道这种类型或任何超类型是否等于T
.我是否必须getSuperclass()
递归调用以确保检查所有超类型?
ska*_*man 46
相当巴洛克风格的名字Class.isAssignableFrom
就是你所追求的.我通常最终必须阅读javadoc,以确保我正确地得到它:
确定此Class对象表示的类或接口是否与指定的Class参数表示的类或接口相同,或者是它们的超类或超接口.如果是这样,它返回true; 否则返回false.如果此Class对象表示基本类型,则如果指定的Class参数恰好是此Class对象,则此方法返回true;否则返回true.否则返回false.
具体来说,此方法测试是否可以通过标识转换或扩展引用转换将指定的Class参数表示的类型转换为此Class对象表示的类型.
例如:
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());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*azo 14
如果要比较自定义类的字段类型,请尝试使用.class,因为只有基本类型具有.TYPE.
if(field.getType().isAssignableFrom(**YOURCLASS.class**)){}
归档时间: |
|
查看次数: |
58901 次 |
最近记录: |