什么是重复注释的真实案例?

时间:2014-04-23 05:47:42

标签: java java-8

实际上,我正在使用Java 8中的新东西。有许多新东西已经出现,即Lambda表达式,默认方法等等......

其中一项功能是重复注释,

  

"重复注释提供了将同一注释类型多次应用于同一声明或类型使用的能力"

在这里我可以理解我可以多次使用相同的注释。

我正在尝试了解此添加的实际/实际用法。并试图理解为什么他们错过了它直到java 7。

3 个答案:

答案 0 :(得分:7)

例如,如果您有一些基于角色的安全性,那么您可以编写如下内容:

@Authorize(role="USER")
@Authorize(role="ADMIN")
public void doStuff(){
...codez
}

在以前的Java版本中,要实现相同的目标,您必须执行以下操作:

@Authorize(roles={"USER", "ADMIN"})
public void doStuff(){
...codez
}

@Authorize(role="USER, ADMIN")
public void doStuff(){
..moar codez
}

正如你自己所看到的那样,差异很小,而且@Repeatable注释比一个巨大的突破更具有语法糖。除非你考虑一些更详细的注释,比如一堆Quartz cron表达式,否则好处并不明显。在之前的Java 8中,您必须执行以下操作:

@Cron(values={"* * * * * 10", "12 * * * * 0", "4 * 5 * 6 * 7"})
public void doCron(){

}

但是在java 8中,每行可以有一个单独的cron,这使得表达式更具可读性。

答案 1 :(得分:7)

在注释中声明多个字段时非常有用。例如:

@Repeatable
public @interface Role {
   String type;
   String[] allowed;
}

在这种情况下,将这种注释用于多个角色要容易得多:

@Role(type="readonly", allowed={"view"})
@Role(type="admin", allowed={"view,add,update,delete"})
public boolean checkAllowed() {
}

答案 2 :(得分:2)

答案显而易见:您想要注释具有多个值的内容。

在此功能之前,您需要解析注释处理代码中的单个允许参数:

@SomeAnnotation(value="this,that")
String foo;

或(来自评论):

@SomeAnnotation(value={"author1","author2"})
String foo;

注释处理代码需要具有处理拆分值并处理它或获取多个值的逻辑。从逻辑角度来看,允许多个注释使这更简单。它只是一个便利功能。