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
risposta
È 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.
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'. –
Questa funzione fa parte del progetto Moneta 2 e sarà disponibile in Java 9 prossimo luglio 2017.
è tutto Accettare chiamata @SafeVarargs sui metodi privati.
- 1. Rendi definitivi i metodi privati?
- 2. Perché i metodi parziali devono essere annullati?
- 3. Perché i bean Java devono essere serializzabili?
- 4. Java: tutti i metodi statici devono essere sincronizzati?
- 5. Perché i metodi statici devono essere inclusi in una classe?
- 6. Perché i metodi "privati" nell'oggetto orientato?
- 7. Perché non tutti gli argomenti della funzione devono essere dichiarati definitivi?
- 8. I campi devono essere esplicitamente definitivi per avere un oggetto "corretto" immutabile?
- 9. Sovrascrittura dei metodi privati in Java
- 10. I metodi Robot devono essere eseguiti sulla coda eventi?
- 11. Metodi privati su metodi pubblici
- 12. Perché i tipi WinRT devono essere sigillati?
- 13. WHY i metodi virtuali devono essere esplicitamente ignorati in C#?
- 14. Rendi privati i metodi delegati
- 15. In Java, perché equals() e hashCode() devono essere coerenti?
- 16. JVM e metodi privati
- 17. Perché i metodi di test in Junit devono essere definiti pubblici?
- 18. Perché OpenJDK inserisce metodi privati in vtable?
- 19. Java: come implementare metodi astratti privati?
- 20. In Java, i metodi che non utilizzano variabili statiche o di classe devono essere sincronizzati?
- 21. Perché gli oggetti Java devono essere multipli di 8?
- 22. In che modo i membri pubblici e privati devono essere implementati nell'obiettivo-c?
- 23. Devo testare i metodi privati usando RSpec?
- 24. Perché i parametri di restituzione devono essere denominati?
- 25. Perché i sindacati anonimi globali devono essere dichiarati come statici?
- 26. Perché i frammenti IP devono essere multipli di 8 byte
- 27. Perché i componenti in reazione devono essere in maiuscolo?
- 28. metodi privati in Ruby
- 29. F # Metodi statici privati
- 30. Metodi e campi privati
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