基本上,我的要求是通过使用反射来获取超类对象,以便我可以获取字段名称及其值。
所以, 我有一个
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
有人可以帮助我如何将其转换为对象,以便我可以访问已归档的
答案 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