如果字段是某种类型的实例,我想通过反射找出T.
让我们说我有一个对象o.现在我想知道它是否有任何实例的字段T.我可以得到所有领域:
o.getClass().getFields();
我可以得到该字段的类型:
field.getType();
但现在我想知道这种类型或任何超类型是否等于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());
         }
      }
   }
}
Ste*_*azo 14
如果要比较自定义类的字段类型,请尝试使用.class,因为只有基本类型具有.TYPE.
if(field.getType().isAssignableFrom(**YOURCLASS.class**)){}