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

这是通常的代码:

@Autowire private Service service; 

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

 private @Autowire Service service; 

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

根据文件

在Java 7中:

注释可以应用于声明:类,字段,方法和其他程序元素的声明。 当在声明中使用时,每个注释通常按照惯例出现在它自己的行上。

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

类实例创建表达式:

 new @Interned MyObject(); 

输入:

 myString = (@NonNull String) str; 

实现条款:

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

抛出的exception声明:

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

根据官方Java 7语法,这是合法的:

 Modifier: Annotation public protected private static abstract final native synchronized transient volatile strictfp ClassOrInterfaceDeclaration: {Modifier} (ClassDeclaration | InterfaceDeclaration) ... 

Java 8的语法似乎也允许自由混合修饰符:

 MethodDeclaration: {MethodModifier} MethodHeader MethodBody MethodModifier: Annotation public protected private abstract static final synchronized native strictfp