在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ 反射修改對(duì)象屬性問題

反射修改對(duì)象屬性問題

public class A{
    B b;
    
    A(){
        b = new B();
        b.xxx();
        //b做了很多初始化
    }

    private static class B{
        static final int v = 0;
    }
}

要修改b中的v,嘗試代碼如下

A a = new A();

Class<?> cls = a.getClass();
Field mTNField =cls.getDeclaredField("b");

Class<?> mTnCls  = mTNField.getType();
Field mTnDurationField =mTnCls.getDeclaredField("v");
mTnDurationField.setAccessible(true);

//下面方法的第一個(gè)參數(shù)需要一個(gè)B 對(duì)象,但是這個(gè)對(duì)象應(yīng)該怎么拿到呢?
mTnDurationField.setInt(mTNField.getType().clone(),999);
回答
編輯回答
離魂曲

去掉final修飾符,使用 T newInstance(Object... initargs) 得到對(duì)象實(shí)例。

      使用此 Constructor 對(duì)象表示的構(gòu)造方法來創(chuàng)建該構(gòu)造方法的聲明類的新實(shí)例,并用指定的初始化參數(shù)初始化該實(shí)例。 
2018年3月24日 07:49
編輯回答
筱饞貓
        Field field = b.getClass().getDeclaredField("v");
        field.setAccessible(true);
        field.setInt(null, 1);
        System.out.println(b.v);

finalJVM 啟動(dòng)后就不能改動(dòng)了,所以要去掉。

對(duì)于靜態(tài)屬性直接置空即可:
field.setInt(null, 1);

2018年5月10日 18:31
編輯回答
無標(biāo)題
A a = new A();

        Class<?> cls = a.getClass();
        Field mTNField =cls.getDeclaredField("b");

        Class<?> mTnCls  = mTNField.getType();
        Field mTnDurationField =mTnCls.getDeclaredField("v");
        mTnDurationField.setAccessible(true);

        //下面方法的第一個(gè)參數(shù)需要一個(gè)B 對(duì)象,但是這個(gè)對(duì)象應(yīng)該怎么拿到呢?
        Constructor<?> c=mTnCls.getDeclaredConstructors()[0];
        c.setAccessible(true);
        mTnDurationField.setInt(c.newInstance(),999);
2017年2月12日 09:29
編輯回答
互擼娃
NullPointerException   if the specified object is null and the field is an instance field.

java.lang.NullPointerException: null receiver
 at java.lang.reflect.Field.setInt(Native Method)

不能接收空值

2018年8月29日 02:14