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

gav*_*koa 7 java annotations java-8

这是通常的代码:

@Autowire
private Service service;
Run Code Online (Sandbox Code Playgroud)

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

private @Autowire Service service;
Run Code Online (Sandbox Code Playgroud)

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

use*_*339 10

根据文件

在Java 7中:

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

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

类实例创建表达式:

new @Interned MyObject();
Run Code Online (Sandbox Code Playgroud)

输入:

myString = (@NonNull String) str;
Run Code Online (Sandbox Code Playgroud)

实现条款:

class UnmodifiableList<T> implements
    @Readonly List<@Readonly T> { ... }
Run Code Online (Sandbox Code Playgroud)

抛出的异常声明:

void monitorTemperature() throws
    @Critical TemperatureException { ... }
Run Code Online (Sandbox Code Playgroud)


gav*_*koa 5

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

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

ClassOrInterfaceDeclaration: 
  {Modifier} (ClassDeclaration | InterfaceDeclaration)
...
Run Code Online (Sandbox Code Playgroud)

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

MethodDeclaration:
    {MethodModifier} MethodHeader MethodBody 

MethodModifier:
    Annotation public protected private
    abstract static final synchronized native strictfp 
Run Code Online (Sandbox Code Playgroud)

  • 除了将Java7*类*声明的语法与Java8*方法*声明进行比较之外,两个语法的语义没有区别.两者都允许自由混合注释和修饰符关键字. (2认同)