2014-04-03 41 views
2

這是通常的代碼:在Java 7中將訪問修飾符置於註釋之後是否合法?或者Java 8?

@Autowire 
private Service service; 

但與Java 7這也適用(短):

private @Autowire Service service; 

那是法律在Java中8(有相同的語義)?這是不好的編碼習慣?

+2

這不是真的更短,因爲你也可以寫'@Autowire私人服務服務;'... –

+1

法律:是的....好idead:我想不是! –

+1

http://stackoverflow.com/questions/7050233/java-modifiers-syntax-and-format – gavenkoa

回答

4

根據documentation

在Java 7:

註釋可以應用於聲明:類, 字段,方法,以及其它的程序元素聲明。當在 聲明上使用時,每個註釋經常出現,按照慣例,在它自己的 行上。

從Java SE 8發行版開始,註釋也可以應用於類型的使用。 :

Class實例創建表達式:

new @Interned MyObject(); 

類型轉換:

myString = (@NonNull String) str; 

實現子句:

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

拋出的異常聲明:

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

根據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 
+1

除了將Java7 * class *聲明的語法與Java8 * method *聲明進行比較之外,兩種語法的語義沒有區別。兩者都允許自由混合註釋和修飾符關鍵字。 – Holger

+0

@Holger我只是複製我從規格中找到的第一個))保存我的時間)) – gavenkoa