通过反射使用子类获取超类字段

时间:2019-07-02 11:57:04

标签: java reflection

基本上,我的要求是通过使用反射来获取超类对象,以便我可以获取字段名称及其值。

所以, 我有一个

Class Emp {
  private firstName;
  priavte lastName;
}

Class Dept extend Emp {
  private dpFirstName;
  priavte dpLastName;
}

现在正在使用

emp.getClass.getSuperClass

这给了我Dept类的java.lang.Class类型 现在,当我尝试使用以下代码访问该字段时。

Class<?> fields = emp.getClass.getSuperClass;
for (Field field : fields.getDeclaredFields()) {
  field.setAccessible(true);             
  System.out.println(field.get(emp.getClass.getSuperClass));
}

它使我感到异常

Can not set java.lang.String field com.Dept.dpFirstName to java.lang.Class

有人可以帮助我如何将其转换为对象,以便我可以访问已归档的

3 个答案:

答案 0 :(得分:1)

您的问题是您获得了navbar-expand-sm而不是public class Emp { private String firstName; private String lastName; } public class Dep extends Emp{ private String dpFirstName; private String dpLastName; } public class Main { public static void main(String[] args) throws Exception { Dep d = new Dep(); Class<?> c = d.getClass().getSuperclass(); for (Field field : c.getDeclaredFields()) { field.setAccessible(true); if(field.getName().equals("firstName")){ field.set(d, "First Name"); } if(field.getName().equals("lastName")){ field.set(d, "Last Name"); } System.out.println(field.getName() + "\t" + field.get(d)); } } } 的超类。

Emp

因此,您可以使用以下代码段作为正确的示例:

Dept

答案 1 :(得分:0)

假设您的代码的有效版本如下所示:

class Emp {
    private String firstName;
    private String lastName;
}

class Dept extends Emp {
    private String dpFirstName;
    private String dpLastName;
}

编辑: 忘记演员表,没有它就可以工作。

Class<?> fields = emp.getClass().getSuperclass();

for (Field field : fields.getDeclaredFields()) {
  field.setAccessible(true);             
  System.out.println(field.getName() + "\t" + field.get(emp));
}

答案 2 :(得分:0)

sm