2017-05-31 87 views
1

我想通過一個方法來註釋。是這樣的可能嗎?如何將方法傳遞給使用Java 8的註釋?

@MyAnnotation(method = MyClass::myMethod) 
private String myVariable; 
+4

No:https://stackoverflow.com/questions/1458535/which-types-can-be-used-for-java-annotation-members –

回答

2

傳遞方法不是一種選擇。相反,傳遞以下內容應該允許您使用反射來查找方法。

@MyAnnotation(clazz=String.class, method="contains", params= {CharSequence.class}) 

@interface MyAnnotation { 
    Class<?> clazz(); 
    String method(); 
    Class<?>[] params() default {}; 
} 

MyAnnotation annotation = // get the annotation 
annotation.clazz().getMethod(annotation.method(), annotation.params()); 
+0

請注意,註釋允許省略單個元素數組的大括號,所以您可以在你的示例用例中寫入'params = CharSequence.class'。爲了簡化沒有參數的情況(更進一步),我會在註釋類型聲明中使用'Class [] params()default {};'所以你可以編寫例如'@MyAnnotation(clazz = String.class,method =「isEmpty」)''。 – Holger

0

JSL說:

註釋屬性僅可以採用:bytechardoublefloatintlongshortbooleanStringEnum類型,ClassAnnotation,1名維陣列類型[type

但是必須將方法引用表達式分配給功能接口。所以你目前不能引用方法引用表達式。