toString esempi in Java
Utilizzeremo la seguente classe per dimostrare il nostro esempio toString per Netbeans, Eclipse e l'utilità ToStringBuilder di Apache.
/** * Java программа, демонстрирующая How переопределить метод toString() в Java. * Эта Java программа показывает How вы можете использовать IDE типа Netbeans or Eclipse * и открытую библиотеку типа Apache commons ToStringBuilder для * переопределения toString в Java. * @author Javarevisited.blogspot.com */ public class Country { private String name; private String capital; private long population; private Date independenceDay; public Country(String name){ this.name = name; } public String getName(){ return name; } public void setName(String name) {this.name = name;} public String getCapital() {return capital;} public void setCapital(String capital) {this.capital = capital;} public Date getIndependenceDay() {return independenceDay;} public void setIndependenceDay(Date independenceDay) {this.independenceDay = independenceDay;} public long getPopulation() { return population; } public void setPopulation(long population) {this.population = population; } @Override public String toString() { return "Country{" + "capital=" + capital + ", population=" + population + ", independenceDay=" + independenceDay + '}'; } public void setIndependenceDay(String date) { DateFormat format = new SimpleDateFormat("dd/MM/yyyy"); try { this.independenceDay = format.parse(date); } catch (ParseException ex) { Logger.getLogger(Country.class.getName()).log(Level.SEVERE, null, ex); } } public static void main(String args[]) { Country India = new Country("India"); India.setCapital("New Delhi"); India.setIndependenceDay("15/07/1947"); India.setPopulation(1200000000); System.out.println(India); } }
Il metodo toString creato dall'IDE Netbeans
Il metodo toString generato da Netbeans IDE produce il seguente output per la classe definita sopra:
Country{capital=New Delhi, population=1200000000, independenceDay=Fri Aug 15 00:00:00 VET 1947}
Se guardi l'output sopra, vedrai che Netbeans non sta creando la data formattata per te: sta invece chiamando il metodo toString() della classe java.util.Date
Il metodo toString() creato dall'IDE Rclise
Per impostazione predefinita, Eclipse crea il seguente metodo toString:
@Override public String toString() { return "Country [name=" + name + ", capital=" + capital + ", population=" + population + ", independenceDay=" + independenceDay + "]"; }
È possibile generare codice per il metodo toString in Eclipse facendo clic su Sorgente --> Genera toString(). Fornisce inoltre diverse possibilità, come la scelta dello stile del codice, ovvero l'utilizzo dell'operando di concatenazione o StringBuilder e così via. Di seguito è riportato l'output del metodo toString() che abbiamo appena creato in Eclipse:
Country [name=India, capital=New Delhi, population=1200000000, independenceDay=Tue Jul 15 00:00:00 VET 1947]
Utilizzo di ToStringBuilder per sovrascrivere il metodo toString() di Java
Insieme a molte classi utili come PropertyUtils , EqualsBuilder o HashCodeBuilder, Apache fornisce anche ToStringBuilder che può generare codice per restituire il metodo toString() in diversi stili diversi. Vediamo come appare l'output del metodo toString in stile semplice e multilinea: Stile semplice:
India,New Delhi,1200000000,Fri Aug 15 00:00:00 VET 1947
Stile multilinea:
test.Country@f0eed6[
name=India
capital=New Delhi
population=1200000000
independenceDay=Fri Aug 15 00:00:00 VET 1947
]
NO_FIELD_NAMES_STYLE (stile senza nomi di campo)
test.Country@1d05c81[India,New Delhi,1200000000,Fri Aug 15 00:00:00 VET 1947]
SHORT_PREFIX_STYLE (stile prefisso breve)
Country[name=India,capital=New Delhi,population=1200000000,independenceDay=Fri Aug 15 00:00:00 VET 1947]
ToStringStyle.DEFAULT_STYLE (stile predefinito)
test.Country@1d05c81[name=India,capital=New Delhi,population=1200000000,independenceDay=Fri Aug 15 00:00:00 VET 1947]
Una libreria open source simile di Google, Guava , fornisce anche una comoda API per generare codice per il metodo toString in Java.
Quando il metodo toString viene chiamato in Java
toString è un metodo abbastanza specifico e viene chiamato da molti metodi JavaAPI come println(), printf() , logging, assert instructions , debugger IDE, durante la stampa di raccolte e durante la concatenazione. Se una sottoclasse non sovrascrive toString(), viene richiamata l'implementazione predefinita definita nella classe Object. Molti sviluppatori utilizzano API di registrazione come Log4J o java.util.Logger per generare log e spesso perdono Object qui.
logger.info("Customer not found:" + customer)
e se Customer non esegue l'override di toString e restituisce informazioni importanti come customerId, customerName, ecc. allora sarà abbastanza difficile diagnosticare il problema. Questo è il motivo per cui vale sempre la pena sovrascrivere toString in Java. Diamo un'occhiata ad alcuni dei vantaggi se lo facciamo.
Vantaggi dell'override del metodo toString
- Come discusso in precedenza, un toString opportunamente sovrascritto aiuta con il debug stampando informazioni importanti.
- Se un oggetto importante è archiviato in una raccolta, la stampa della raccolta chiamerà il metodo toString dell'oggetto archiviato, che può stampare le informazioni importanti. Un classico esempio di metodo toString senza override è Array in Java, che stampa il risultato dell'implementazione predefinita invece del contenuto dell'array. Sebbene esistano diversi modi per stampare il contenuto di un array utilizzando Arrays.toString() e simili; ma poiché Array è un oggetto Java, sarebbe molto meglio se sapesse come stamparsi, proprio come le classi di raccolta come List o Set .
Questi sono solo alcuni dei vantaggi che otterrai implementando o sovrascrivendo il metodo toString in Java , ci sono molti altri vantaggi che otterrai e imparerai da solo. Spero che questi suggerimenti ti aiutino a ottenere il massimo dalle tue implementazioni toString. Facci sapere se conosci modi unici di lavorare con toString che ti aiutano nelle tue applicazioni Java.
GO TO FULL VERSION