Java 使用反射子类获取超类字段

Java 使用反射子类获取超类字段,java,reflection,Java,Reflection,基本上,我的要求是通过使用反射来获取超类对象,以便获得字段名及其值 所以, 我有一门课 类电磁脉冲{ 私人名字; priavte姓氏; } 类部门扩展Emp{ 私人姓名; priavte dpLastName; } 现在我正在使用 emp.getClass.getSuperClass 这给了我Dept类的java.lang.Class类型 现在,当我尝试使用以下代码访问字段时 类字段=emp.getClass.getSuperClass; 对于字段字段:fields.getDeclaredFi

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

所以, 我有一门课

类电磁脉冲{ 私人名字; priavte姓氏; } 类部门扩展Emp{ 私人姓名; priavte dpLastName; } 现在我正在使用

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

类字段=emp.getClass.getSuperClass; 对于字段字段:fields.getDeclaredFields{ field.setAccessibletrue; System.out.printlnfield.getemp.getClass.getSuperClass; } 它把我当作例外

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

有谁能帮我把它转换成一个对象,这样我就可以访问这个文件了,假设你的代码的有效版本是这样的:

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));
}

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

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));
}

你的问题是你得到的是Emp的超类,而不是Dept

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

class Emp {
    private String firstName = "first_name";
    private String lastName = "last_name";
}

class Dept extends Emp {
    private String dpFirstName = "dp_first_name";
    private String dpLastName = "dp_last_name";
}

public static void getSuperClassFields(Dept dept) throws IllegalAccessException {
    Class<?> cls = dept.getClass().getSuperclass();

    for (Field field : cls.getDeclaredFields()) {
        field.setAccessible(true);
        System.out.println(field.getName() + " = " + field.get(dept));
    }
}

public static void main(String[] args) throws IllegalAccessException {
    getSuperClassFields(new Dept());
    // in console you can see
    // firstName = first_name
    // lastName = last_name
}

你的问题是你得到的是Emp的超类,而不是Dept

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

class Emp {
    private String firstName = "first_name";
    private String lastName = "last_name";
}

class Dept extends Emp {
    private String dpFirstName = "dp_first_name";
    private String dpLastName = "dp_last_name";
}

public static void getSuperClassFields(Dept dept) throws IllegalAccessException {
    Class<?> cls = dept.getClass().getSuperclass();

    for (Field field : cls.getDeclaredFields()) {
        field.setAccessible(true);
        System.out.println(field.getName() + " = " + field.get(dept));
    }
}

public static void main(String[] args) throws IllegalAccessException {
    getSuperClassFields(new Dept());
    // in console you can see
    // firstName = first_name
    // lastName = last_name
}

张贴你的实际代码。emp.getClass.getSuperClass;无效。类Dept extend Emp也不编译。请发布实际代码。emp.getClass.getSuperClass;无效。类Dept extend Emp也不编译。不过oleg cherednik是正确的,实际上不需要强制转换。因此,我假设在这一过程中的某个地方,您将代码更改为在类部门而不是Emp.oleg cherednik上工作是正确的,但是实际上不需要演员阵容。所以我假设在这条路线上的某个地方,您将代码更改为在类部门而不是Emp上工作。