动态修改method注解属性值

新手上路,请多包涵

【android开发】
1.动态修改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.调试发现得到的InvocationHandler并不是AnnotationInvocationHandler,而是AnnotationFactory,然后修改就失败了

图片描述

4.找了好多方法大多是修改Field注解属性值,修改method注解值暂时没有找到,有处理过相关问题的大佬请多指教

阅读 5.5k
3 个回答

安卓上的 jvm 实现是谷歌专门写的,有些东西跟甲骨文那个 java 不太一样

你断点都下来了 看到了那个 handler 的结构 那么你翻一下它的属性值在哪里 然后一层层 field 取下去就好了

新手上路,请多包涵

method 应该用 getDeclaredMethod ,另外你问题解决了吗

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏