我想通過一個方法來註釋。是這樣的可能嗎?如何將方法傳遞給使用Java 8的註釋?
@MyAnnotation(method = MyClass::myMethod)
private String myVariable;
我想通過一個方法來註釋。是這樣的可能嗎?如何將方法傳遞給使用Java 8的註釋?
@MyAnnotation(method = MyClass::myMethod)
private String myVariable;
傳遞方法不是一種選擇。相反,傳遞以下內容應該允許您使用反射來查找方法。
@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());
請注意,註釋允許省略單個元素數組的大括號,所以您可以在你的示例用例中寫入'params = CharSequence.class'。爲了簡化沒有參數的情況(更進一步),我會在註釋類型聲明中使用'Class > [] params()default {};'所以你可以編寫例如'@MyAnnotation(clazz = String.class,method =「isEmpty」)''。 – Holger
JSL說:
註釋屬性僅可以採用:
byte
,char
,double
,float
,int
,long
,short
,boolean
,String
,Enum
類型,Class
,Annotation
,1名維陣列類型[type
。
但是必須將方法引用表達式分配給功能接口。所以你目前不能引用方法引用表達式。
No:https://stackoverflow.com/questions/1458535/which-types-can-be-used-for-java-annotation-members –