2016-12-14 3 views
0

In Java können Sie einer lokalen Variablen eine Anmerkung hinzufügen. Ist es jedoch möglich, eine Anmerkung in einen Ausdruck einzufügen? (Ich nehme an, die Antwort ist nein, aber dachte, ich würde sowieso fragen) Ich habe eine gute Schätzung gemacht, wie es aussehen könnte, aber es kompiliert nicht.Anmerkung zu einem Ausdruck

@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

Wofür wäre es nützlich, wenn Sie es tun könnten? – Sam

+0

@Sam etwas wie [Projekt Lombok] (https://projectlombok.org/), mit dem Sie Code basierend auf Anmerkungen injizieren können. – flakes

Antwort

1

See 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 ist ein Ganzzahlliteral, kein Erklärung oder ein Typ, so kann es nicht mit Anmerkungen versehen werden.

+0

Macht Sinn. Um die gewünschte Funktionalität zu erhalten, müsste der Ausdruck vor der Verwendung als lokal deklariert werden. '@Foo int k = 456; int i = 123 + k; ' – flakes

+0

Könnten Sie die Antwort eigentlich aktualisieren, um einzuschließen, warum' int i = (@Foo int) 123; 'auch nicht möglich ist? 'error: Anmerkungstyp nicht anwendbar für diese Art von Deklaration' – flakes

+1

' int i = (@Foo int) 123; 'ist erlaubt, wenn Sie die Annotation wie folgt deklarieren:' @Target (ElementType.TYPE_USE) @interface Foo {} ' – Andreas