如何使用Java8将方法传递给注释?
我想将一个方法传递给注释。这样的事情可能吗如何使用Java8将方法传递给注释?,java,java-8,annotations,Java,Java 8,Annotations,我想将一个方法传递给注释。这样的事情可能吗 @MyAnnotation(method = MyClass::myMethod) private String myVariable; 传递方法不是一个选项。相反,请传递以下内容,这将允许您使用反射查找方法 @MyAnnotation(clazz=String.class, method="contains", params= {CharSequence.class}) @interface MyAnnotation { Class<
@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());
@MyAnnotation(clazz=String.class,method=“contains”,params={CharSequence.class})
@接口MyAnnotation{
类clazz();
字符串方法();
类[]params()默认值{};
}
MyAnnotation=//获取注释
annotation.clazz().getMethod(annotation.method(),annotation.params());
说:
注释属性只能采用:byte
,char
,double
,float
,int
,long
,short
,boolean
,字符串
,枚举
类型,Class
,注释
,一维数组类型
但是方法引用表达式必须分配给函数接口。因此,您目前无法引用方法引用表达式。否:希望有一天它会得到支持。这正是我试图做的。请注意,注释允许省略单个元素数组的大括号,因此您可以编写
params=CharSequence.class
在您的示例用例中。为了简化无参数的情况(甚至更进一步),我将在注释类型声明中使用Class[]params()default{};
,这样您就可以编写,例如@MyAnnotation(clazz=String.Class,method=“isEmpty”)
。或者,为了避免键入错误的风险“contains”
,@接口MyAnnotation
可以有一个字段类