2014-12-29 124 views
4

的方法標註的參數,我發現這個線程:How to change annotation value at runtime using reflection?在運行時修改

我試圖改變方法的註釋,但java.lang.reflect.Method中不包含像「註釋」或方法的任何地圖場像「getDeclaredAnnotationMap」

只有private byte[] annotations但我該怎麼做這個字節數組?

那麼,如何修改方法的註解呢?

編輯:
我創建的:http://pastebin.com/T2rewcwU
但是,只有編輯方法的這種情況下,如果取消註釋33行代碼那麼值將重置。

+1

你確定嗎? http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html#getDeclaredAnnotations-- – MPirious

+0

「map-field」和「getDeclaredAnnotation ** Map **」,只有複製包含註釋的數組,如果編輯它,則不會有任何改變。 – GotoFinal

+0

哎呀,對我來說太晚了。我在JavaDocs後停止閱讀「此方法的調用者可以自由修改返回的數組」。 – MPirious

回答

1

我寫了一個類AnnotationUtil來解決seris的要求。

它可以添加/刪除/更改類/字段/方法實例上的註釋值。

請注意,使用ReflectUtil可以在添加/刪除註釋時獲取根域/方法。

看到它在GitHub上:

AnnotationUtil

ReflectUtil

+0

我甚至不記得我爲什麼現在需要這個,並且我已經知道這個技巧(因爲我只是錯過了根實例),但忘記了這個問題。 請注意,它將不會在接下來的java版本中工作,因爲它們不允許在模塊之間進行反射 - 需要使用附加的jvm參數 - 或代理+儀器/不安全/本機代碼。 我會接受這個答案。 – GotoFinal