2014-11-30 13 views
7

In base allo documentation of SafeVarargs, l'annotazione @SafeVarargs può essere applicata solo ai metodi di costrutto o di aritmetria variabile che sono static o final. Questo è, I have read, per eliminare i problemi relativi all'ereditarietà delle annotazioni; vale a dire, le annotazioni sui metodi sono consentite solo se il metodo non può essere sovrascritto. Chiaramente, i costruttori, i metodi static e i metodi final non possono essere sovrascritti. Tuttavia, né i metodi né i metodi private possono essere inseriti in uno final class. Someone has complained sull'impossibilità di designare i metodi @SafeVarargs private, ma neither of these issues has been addressed. In generale, no one really seems to care. Mi sto perdendo qualcosa? Mi sto lamentando di qualcosa che non ha applicazioni pratiche? O... ?Perché non è possibile applicare @SafeVarags ai metodi di istanza in una classe finale?

+0

Meh, se l'uso di vararg in un metodo è sicuro, sono propenso a utilizzare un'annotazione SuppressWarnings per impedire al compilatore di lamentarsi. Ma non sono sicuro del motivo per cui non puoi usare questa annotazione su metodi che sono effettivamente definitivi. – jjm

+1

@jjm Se ricordo correttamente, l'uso di '@SuppressWarnings (" unchecked ")' su un metodo varargs sopprimerà l'avviso in quella posizione, ma ci saranno comunque degli avvisi ovunque venga usato quel metodo. Quindi la _raison d'être_ per '@ SafeVarargs'. –

risposta

5

È programmato per essere risolto in Java 9; vedi http://openjdk.java.net/jeps/213.

+0

In realtà mi sono collegato qui alla mia domanda, ma non ero sicuro se questa fosse una proposta poco importante (libera di essere ignorata) o qualcosa che era molto probabile che fosse passata attraverso. Ho anche notato che (curiosamente) non fa menzione dei metodi nelle classi 'finali'. Supponi che ci sia una ragione per questo oltre alla semplice supervisione? –

+0

Sì, è previsto l'inclusione in JDK9. –