如何使用Java 8将方法传递给注释?

Fru*_*sch 7 java annotations java-8

我想将方法​​传递给注释.这样的事情可能吗?

@MyAnnotation(method = MyClass::myMethod)
private String myVariable;
Run Code Online (Sandbox Code Playgroud)

Dan*_*ahn 11

传递方法不是一种选择.相反,传递以下内容,以便您可以使用反射找到方法.

@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());
Run Code Online (Sandbox Code Playgroud)

  • 请注意,注释允许省略单个元素数组的大括号,因此您可以在示例用例中编写“params=CharSequence.class”。为了简化无参数的情况(甚至进一步),我在注释类型声明中使用 `Class&lt;?&gt;[] params() default {};`,这样您就可以编写,例如 `@MyAnnotation(clazz=String) .class,方法=“isEmpty”)`。 (2认同)

hol*_*ava 5

JSL说:

注解属性只能取:byte, char, double, float, int, long, short, boolean, String, Enumtype, Class, Annotation, 1维数组类型[type

但是必须将方法引用表达式分配给功能接口。所以你目前不能引用方法引用表达式。


归档时间:

查看次数:

3079 次

最近记录:

8 年,5 月 前