JavaRush /Java Blog /Random-IT /10 suggerimenti per sovrascrivere il metodo toString() in...
Ku6ep
Livello 35

10 suggerimenti per sovrascrivere il metodo toString() in Java (parte 2)

Pubblicato nel gruppo Random-IT

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

  1. Come discusso in precedenza, un toString opportunamente sovrascritto aiuta con il debug stampando informazioni importanti.
  2. 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.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION