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

鍍金池/ 問答/Java  Android/ 動態(tài)修改method注解屬性值

動態(tài)修改method注解屬性值

【android開發(fā)】
1.動態(tài)修改method注解屬性值,按照https://segmentfault.com/a/11... 描述的方式不能實現

2.關鍵代碼

final String value = changeValueAnotation.value();
                InvocationHandler h = Proxy.getInvocationHandler(annotation);
                // 獲取 AnnotationInvocationHandler 的 memberValues 字段
                Field hField = h.getClass().getDeclaredField("memberValues");
                Log.e(TAG, hField.getType().getName());
                // 因為這個字段事 private final 修飾,所以要打開權限
                hField.setAccessible(true);
                // 獲取 memberValues
                Map memberValues = (Map) hField.get(h);
                // 修改 value 屬性值
                memberValues.put("declaredName", value);

3.調試發(fā)現得到的InvocationHandler并不是AnnotationInvocationHandler,而是AnnotationFactory,然后修改就失敗了

圖片描述

4.找了好多方法大多是修改Field注解屬性值,修改method注解值暫時沒有找到,有處理過相關問題的大佬請多指教

回答
編輯回答
夕顏

method 應該用 getDeclaredMethod ,另外你問題解決了嗎

2017年7月21日 06:05
編輯回答
尋仙

安卓上的 jvm 實現是谷歌專門寫的,有些東西跟甲骨文那個 java 不太一樣

你斷點都下來了 看到了那個 handler 的結構 那么你翻一下它的屬性值在哪里 然后一層層 field 取下去就好了

2018年1月26日 10:24
編輯回答
櫻花霓

解決了沒有?同樣碰到相同的問題

2017年7月20日 02:56