2016-12-14 79 views
0

在Java中,您可以將註釋添加到局部變量,但是,是否可以將註釋放在表達式上? (我假設答案是否定的,但我想問問無論如何)我對它的外觀做了一個最好的猜測,但它不能編譯。關於表達式的註釋

@interface Foo {} 

class Bar { 
    void bar() { 
     // local variable annotation 
     @Foo int i = 123 + 456; 
     // expression annotation 
     // error: illegal start of expression 
     int j = 123 + @Foo 456; 
     // error: annotation type not applicable to this kind of declaration 
     int j = 123 + (@Foo int) 456; 
    } 
} 
+0

如果你能做到,它會有什麼用? – Sam

+0

@Sam像[project lombok](https://projectlombok.org/),它可以讓你注入基於註釋的代碼。 – flakes

回答

1

見JLS §9.6.4.1 @Target

Annotation types may be applicable in declaration contexts, where annotations apply to declarations, or in type contexts, where annotations apply to types used in declarations and expressions.

456是文字的整數,而不是一個聲明類型,因此它不能被註解。

+0

有道理。爲了獲得所需的功能,我猜你必須在使用它之前將表達式聲明爲本地; '@Foo int k = 456; int i = 123 + k;' – flakes

+0

其實,你能否更新答案來包括爲什麼'int i =(@Foo int)123;'也是不可能的? '錯誤:註釋類型不適用於這種聲明' – flakes

+1

'int i =(@Foo int)123;'如果您像下面這樣聲明註釋,則允許':@Target(ElementType.TYPE_USE)@interface Foo {}' – Andreas