在Java 7中将访问修饰符放在注释后是否合法?还是Java 8?

时间:2014-04-03 13:03:36

标签: java annotations java-8

这是通常的代码:

@Autowire
private Service service;

但是使用Java 7,这也可以(并且更短):

private @Autowire Service service;

Java 8中是否合法(具有相同的语义)?这是不好的编码实践吗?

2 个答案:

答案 0 :(得分:8)

根据documentation

在Java 7中:

  

注释可以应用于声明:类的声明,   字段,方法和其他程序元素。当用于   声明,每个注释经常出现,按惯例,单独出现   线。

从Java SE 8发行版开始,注释也可以应用于类型的使用。 :

类实例创建表达式:

new @Interned MyObject();

输入:

myString = (@NonNull String) str;

实现子句:

class UnmodifiableList<T> implements
    @Readonly List<@Readonly T> { ... }

抛出的异常声明:

void monitorTemperature() throws
    @Critical TemperatureException { ... }

答案 1 :(得分:5)

根据official Java 7 grammar,这是合法的:

Modifier: 
  Annotation
  public
  protected
  private
  static 
  abstract
  final
  native
  synchronized
  transient
  volatile
  strictfp

ClassOrInterfaceDeclaration: 
  {Modifier} (ClassDeclaration | InterfaceDeclaration)
...

Grammar for Java 8似乎也允许自由混合修饰语:

MethodDeclaration:
    {MethodModifier} MethodHeader MethodBody 

MethodModifier:
    Annotation public protected private
    abstract static final synchronized native strictfp