如何使用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
可以有一个字段