是否有一種方便的方式來迭代Object的屬性並檢查每個對象的註釋?在Groovy中反思的屬性註釋
回答
你可以這樣來做:
// First, declare your annotation
import java.lang.annotation.*
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface MyAnnot {
}
// Then, define your class with it's annotated Fields
class MyClass {
@MyAnnot String fielda
String fieldb
@MyAnnot String fieldc
}
// Then, we will write a method to take an object and an annotation class
// And we will return all properties of the object that define that annotation
def findAllPropertiesForClassWithAnotation(obj, annotClass) {
obj.properties.findAll { prop ->
obj.getClass().declaredFields.find {
it.name == prop.key && annotClass in it.declaredAnnotations*.annotationType()
}
}
}
// Then, define an instance of our class
MyClass a = new MyClass(fielda:'tim', fieldb:'yates', fieldc:'stackoverflow')
// And print the results of calling our method
println findAllPropertiesForClassWithAnotation(a, MyAnnot)
在這種情況下,這個打印出:
[fielda:tim, fieldc:stackoverflow]
希望它能幫助!
謝謝,這很有用!不是我可以期待從Groovy那裏超級優雅,但它的工作原理:) – Pavlo
@pavlo不雅相比java版本的同樣的東西? –
使用Groovy 2.4.5,這似乎是做到這一點的方式: ' 高清findAllPropertiesForClassWithAnotation(OBJ,annotClass){ obj.properties.findAll {道具 - > obj.class.declaredFields.find {場 - > field.name == prop.key && field.declaredAnnotations * .annotationType()。含有(annotClass) }} } ' 如何 –
- 1. 傳遞註釋屬性元註釋
- 2. 屬性的POJO xml註釋
- 3. 註釋Groovy bean在Spring中加載
- 4. 註釋中的彈簧屬性值
- 5. IndexColumn註釋中的基本屬性
- 6. 如何實例的屬性與反思
- 7. 反思與屬性的插件架構
- 8. UIDocumentInteractionController註釋屬性使用
- 9. Java註釋屬性限制
- 10. 檢索Java註釋屬性
- 11. 如何註釋掉屬性
- 12. 反向代碼屬性的代碼第一個數據註釋
- 13. Groovy刪除多行註釋
- 14. 將註釋屬性加載到java中的屬性對象
- 15. 反思對象打印屬性
- 16. 屬性/方法內聯和反思
- 17. 在UWP中獲取公共實例屬性的反思
- 18. groovy的元屬性?
- 19. Groovy AST-在編譯時添加註釋
- 20. 如何從屬性中使用Spring @Value設置註釋屬性
- 21. 從屬性文件中讀取hibernate註釋屬性值
- 22. 如何在類屬性上添加註釋,並迭代屬性?
- 23. 帶有幀註釋的多值屬性
- 24. Jackson @JsonBackReference帶註釋的屬性
- 25. 覆蓋屬性的XML註釋
- 26. django註釋基於屬性的queryset
- 27. Java註釋的默認屬性
- 28. 訪問向父屬性的註釋
- 29. 每個屬性的默認註釋jsr303
- 30. 我可以在構造函數註釋中引用屬性註釋嗎?
我不認爲有。也許你可以給我們更多關於你想要實現的信息。 –