2011-10-11 15 views
23

Ho un metodo privato in una classe interna che è privato Vorrei utilizzare l'annotazione di SafeVarargs. Tuttavia, sono obbligato ad avere un metodo statico o finale. Perché un metodo privato deve essere definitivo? Non è ridondante?java @SafeVarargs perché i metodi privati ​​devono essere definitivi

+0

Se ho capito correggere è possibile utilizzare @Safe varargs per i costruttori, per i metodi statici, per i metodi finali e poiché java-9 per privati ​​ – gstackoverflow

risposta

15

È ridondante e si ottiene un punto eccellente.

Penso che il vero motivo per il requisito di finale o statico era quello di forzare che il metodo non potesse essere sovrascritto, e quindi una sottoclasse non poteva manomettere i dati in un modo che rendeva inutile l'annotazione @SafeVarargs sulla definizione del metodo.

Ma, anche se è superfluo, non è poi così male di una decisione - più di una volta, i programmatori farà ogni metodo privato, per quanto possibile, e quindi aprire lentamente la classe come necessario. Se questo metodo è contrassegnato come finale quando è in ambito privato, se il metodo deve essere aperto, può ancora avere l'annotazione @SafeVarargs in posizione con solo una modifica al livello di accesso. Se la finale viene rimossa intenzionalmente, riceverai l'errore di compilazione, ma se lo hai già fatto, chiunque rimuova l'accesso privato (che potrebbe non essere te stesso, in un ambiente basato sul team) non sarà confuso sul perché rimuovendo il modificatore "privato" improvvisamente il codice non viene più compilato.

+1

Se il messaggio di errore sarebbe qualcosa come "java.lang non valido. Annotazione SafeVarargs. Il metodo Instance ... non è definitivo né privato ", non ci sarebbe confusione per chi ha rimosso il' private'. –

4

Questa funzione fa parte del progetto Moneta 2 e sarà disponibile in Java 9 prossimo luglio 2017.

è tutto Accettare chiamata @SafeVarargs sui metodi privati.

Link.

Problemi correlati