2011-01-07 16 views
5

Non ho mai incontrato il caso e ora mi chiedo: cosa succede quando/se due annotazioni differenti hanno lo stesso nome? (Darò qui un esempio utilizzando un'annotazione fornito dal IntelliJ, ma la questione è davvero generico in modo non sto codificarla 'IntelliJ')Cosa succede se due diverse annotazioni hanno lo stesso nome?

Per esempio la prima frase qui:

http://youtrack.jetbrains.net/issue/IDEABKL-4959

dice:

Molte biblioteche hanno le loro proprie @NotNull annotazioni (IntelliJ, hibernate-validazione, ..).

cosa succede esattamente se volevo usare, per esempio, sia di @NotNull IntelliJ e Hibernate di @NotNull? (ancora una volta @NotNull è solo un esempio in cui trovo uno scontro)

Sono incompatibili? Se sono incompatibili, è per l'intero progetto?

Questo è qualcosa che io non sono davvero familiarità con ...

risposta

8

Non v'è alcuna ambiguità, perché il nome del pacchetto della annotazione verrà specificato in un'importazione o l'annotazione stessa.

JSR-305 indirizzi il tuo esempio specifico. Cerca una serie standard di annotazioni e fa specifico riferimento alle annotazioni sul nullability di FindBugs e IntelliJ.

Annotazioni di nullità (ad esempio, @NonNull e @CheckForNull). Sia FindBugs che IntelliJ supportano già le proprie versioni di annotazioni di nullità. Non

6

In tal caso è necessario specificare il nome completo qualificato, per esempio

@bar.baz.Foo 
@org.fubar.Foo 
void myMethod() {...} 
2

Lo fanno come il pacchetto completo è parte del nome. L'effetto è che puoi importarne solo uno e dovrai fare riferimento a qualsiasi altro con il suo nome completo. Come così

@NotNull 
@com.jetbrains.annotations.NotNull 
public Object ... 
+0

+1 ... Ahi. Di certo sembra brutto/verboso usando il nome completo: - / – Gugussee

1

Che non importa perché il nome completo qualificato di ciascuna annotazione non sarà lo stesso. È possibile dichiarare il nome qualificato nella sezione import.

0

Il problema è lo stesso per due classi/interazioni/enumerazioni/annotazioni con lo stesso nome. Dovrebbero apparire in diversi pacchetti. Se sono nello stesso pacchetto (ad esempio versioni diverse) ma in diverse jar/directory, viene scelto il primo trovato nel classpath.

Problemi correlati