我的班级结构如下
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 块。我认为这不是正确的方法。有没有其他解决方案?提前致谢
我认为你正在尝试做类似的事情:
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)