动态修改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注解值暂时没有找到,有处理过相关问题的大佬请多指教

回答:

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

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

回答:

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

回答:

解决了没有?同样碰到相同的问题

以上是 动态修改method注解属性值 的全部内容, 来源链接: utcz.com/p/174649.html

回到顶部