这是通常的代码:
@Autowire
private Service service;
但是使用Java 7,这也可以(并且更短):
private @Autowire Service service;
Java 8中是否合法(具有相同的语义)?这是不好的编码实践吗?
答案 0 :(得分:8)
在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