Metodo Java toString
toString
Il metodo in Java viene utilizzato per fornire informazioni chiare e sufficienti su un oggetto ( Object
) in un formato leggibile dall'uomo. L'override corretto del metodo toString
può aiutare nella registrazione e nel debug di un programma Java fornendo informazioni preziose e importanti. Poiché toString()
è definito in java.lang.Object
una classe e la sua implementazione predefinita non fornisce molte informazioni, è sempre consigliabile sovrascrivere questo metodo in una classe discendente. Infatti, se stai creando una classe importante o generale di tipo Order
, Trade
o Employee
, sovrascrivi sempre equals , hashCode , compareTo e i toString
metodi in Java. Per impostazione predefinita l'implementazione toString
produce output nel formato , package.class@hashCode
ad esempio per il nostro esempio il metodo della classe stamperà test.Country@18e2b22 dove 18e2b22 è il codice hash dell'oggetto in esadecimale, se chiami il metodo hashCode restituirà 260943370 che è il equivalente decimale di 18e2b22. Queste informazioni non sono particolarmente utili durante la ricerca di un problema. Diamo un'occhiata a un esempio di vita reale in cui devi trovare un problema nella tua connessione di rete, nel caso in cui desideri sapere a quale host e porta il tuo sistema sta tentando di connettersi e se o stampa solo le informazioni predefinite, lo sarà impossibile immaginare il vero problema, ma con un'implementazione sovrascritta possono fornire informazioni utili come nome host e numero di porta. In questo tutorial Java forniremo alcuni suggerimenti sull'override del metodo con esempi di codice. toString()
toString()
Country
Socket
ServerSocket
toString
toString
toString
Come sovrascrivere il metodo toString in Java:
Stampa la data formattata (ad esempio giorno/mese/anno) invece del valore grezzo. Questo è un suggerimento molto utile quando si sovrascrive un metodo JavatoString
. toString()
La classe normale java.util.Date
non restituisce una data formattata e include molti dettagli che non sono sempre necessari. Se stai utilizzando DateFormat parziale, ad es. gg-MM-aa nella tua applicazione, allora vorrai sicuramente vedere questo formato invece di quello predefinito. L'IDE di solito non genera output formattato Date
e questo è qualcosa che dovrai fare da solo, ma ne vale la pena. Leggi Come stampare la data nel formato ggMMaa in Java per i dettagli sulla formattazione Date
in Java. A questo scopo puoi anche utilizzare la classe SimpleDataFormat o la libreria Joda Date time.
Documentare il formato toString
Se il tuo metodotoString()
non restituisce dati come field=value, allora è una buona idea documentare il formato di output toString
, soprattutto per oggetti importanti come Employee o Student. Ad esempio, se un metodo toString()
di classe Работник(Employee)
stampa " John-101-Sales-9846387321 ", allora una buona pratica sarebbe quella di specificare il formato come "nome-id-contatto-dipartimento", ma allo stesso tempo non consentire al client di ottenere informazioni dal metodo toString()
, dovresti sempre fornire metodi appropriati per recuperare i dati, come getName()
, getId()
, getContact()
e così via, poiché le informazioni ottenute toString()
dalla rappresentazione dell'oggetto sono fragili e soggette a errori, quindi il client dovrebbe sempre avere un percorso pulito per ottenere le informazioni informazione.
Utilizza StringBuilder per comporre l'output di toString()
Se stai scrivendo codice per un metodotoString()
in Java, utilizza StringBuilder per aggiungere singoli attributi. Se stai utilizzando un IDE come Eclipse , Netbeans o IntelliJ, anche utilizzare StringBuilder
il metodo e append()
anziché l'operatore + per comporre toString
è la strada da percorrere. Per impostazione predefinita, sia Eclipse che Netbeans generano toString
con l'operatore di concatenazione.
Utilizzando l'annotazione @Override
L'utilizzo@Override
dell'override del metodo in Java è una delle migliori pratiche del linguaggio. Ma questo suggerimento non è così importante come lo sarebbe nel caso dell'override dei metodi equals()
and compareTo()
, poiché l'overload invece dell'override può creare errori più sottili difficili da calcolare. In ogni caso è meglio usare l'annotazione @Overrride
.
Stampare il contenuto di un array invece di stampare l'oggetto dell'array
Un array è un oggetto in Java ma non sovrascrive un metodotoString
e quando si stampa un array il formato di output predefinito non è molto utile poiché vorremmo vedere il contenuto dell'array. A proposito, questo è un altro motivo per cui l'array char[] è preferibile a String per archiviare dati sensibili come una password. Prenditi il tempo necessario per verificare se stampare il contenuto di un array aiuta o meno i tuoi clienti e, se ha senso, stampa il contenuto dell'array anziché l'oggetto stesso. Per motivi di prestazioni, è preferibile utilizzare Collection
tale ArrayList
o HashSet invece Array
di archiviare altri oggetti.
Suggerimenti aggiuntivi
Altri suggerimenti bonus sull'override del metodotoString
in Java.
-
Stampa l'output
toString
su più righe o su una in base alla sua lunghezza. -
Includere nomi di classi completi nella rappresentazione
toString
, in altre parolepackage.class
per evitare qualsiasi malinteso. -
Puoi saltare i valori nulli o mostrarli, ma è meglio mostrarli. A volte sono utili perché mostrano quale campo è presente
null
durante qualche incidente, ad esempio NullPointerException . -
Utilizza un formato chiave-valore, ad esempio
member.name=member.value
, la maggior parte degli IDE lo supporta. -
Includi i membri ereditati se ritieni che debbano fornire le informazioni necessarie alla classe ereditaria.
-
A volte un oggetto contiene molti parametri opzionali e obbligatori, come abbiamo mostrato nel nostro esempio di modello Builder , quando è quasi impossibile stampare tutti i campi, in questo caso possiamo stampare solo i campi obbligatori, soprattutto perché ne abbiamo di opzionali.
GO TO FULL VERSION