通过反射判断场存在与否

Siv*_*iva 3 java reflection

我的班级结构如下

   ClassA{}
   ClassB extends ClassA{}
   ClassC extends ClassB{}
Run Code Online (Sandbox Code Playgroud)

这些类包含一个字段name,比如说,我不知道这个字段存在于哪个类中,我有一个string name和 的对象ClassC。我正在使用反射来获取我的代码所在的字段

  private static Field getType(Object obj,String fieldName){

            Field type = null;
            try
            {
                    type = obj.getClass().getDeclaredField(fieldName);
            } 
            catch (NoSuchFieldException e) {
                    try
                    {
                            type = obj.getClass().getSuperclass().getDeclaredField(fieldName);
                    }
                    catch (NoSuchFieldException e1) {
                            e.printStackTrace();
                    }
            } catch (SecurityException e) {
                    e.printStackTrace();
            }
            return type;
    }
Run Code Online (Sandbox Code Playgroud)

但它只会检查当前类及其超类中的字段,如果我想检查该字段直到顶级类,我需要继续写入 try catch 块。我认为这不是正确的方法。有没有其他解决方案?提前致谢

pat*_*nca 5

我认为你正在尝试做类似的事情:

   Class cls = obj.getClass();        
    for (Class acls = cls; acls != null; acls = acls.getSuperclass()) {
      try {
        Field field = acls.getDeclaredField(fieldName);
        // if not found exception thrown
        // else return field
        return field;
      } catch (NoSuchFieldException ex) {
        // ignore
      }
    }
Run Code Online (Sandbox Code Playgroud)