亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用反射使用子類獲取超類字段

使用反射使用子類獲取超類字段

萬千封印 2023-03-02 14:56:37
基本上,我的要求是通過使用反射獲取超類對象,以便我可以獲得字段名稱及其值。所以,我有一個類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 回答

?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

您的問題是您獲得了超類,Emp但沒有Dept。


Emp emp = new Emp();

Dept dept = new Dept();


Class<?> cls = emp.getClass().getSuperclass(); // it is Class<Object>

Class<?> cls = dept.getClass().getSuperclass(); // it is Class<Emp>

因此,您可以使用以下代碼片段作為正確示例:


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

}


查看完整回答
反對 回復 2023-03-02
?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

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


        }


    }

}


查看完整回答
反對 回復 2023-03-02
?
有只小跳蛙

TA貢獻1824條經驗 獲得超8個贊

假設您的代碼的有效版本如下所示:


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

}


查看完整回答
反對 回復 2023-03-02
  • 3 回答
  • 0 關注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號