toString przykłady w Javie
Użyjemy poniższej klasy, aby zademonstrować nasz przykład toString dla Netbeans, Eclipse i narzędzia ToStringBuilder Apache.
/** * Java программа, демонстрирующая Jak переопределить метод toString() в Java. * Эта Java программа показывает Jak вы можете использовать IDE типа Netbeans Lub 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); } }
Metoda toString stworzona przez Netbeans IDE
Metoda toString wygenerowana przez Netbeans IDE generuje następujące dane wyjściowe dla klasy zdefiniowanej powyżej:
Country{capital=New Delhi, population=1200000000, independenceDay=Fri Aug 15 00:00:00 VET 1947}
Jeśli spojrzysz na powyższe dane wyjściowe, zobaczysz, że Netbeans nie tworzy dla Ciebie sformatowanej daty: zamiast tego wywołuje metodę toString() klasy java.util.Date
Metoda toString() utworzona przez środowisko IDE Rclise
Domyślnie Eclipse tworzy następującą metodę toString:
@Override public String toString() { return "Country [name=" + name + ", capital=" + capital + ", population=" + population + ", independenceDay=" + independenceDay + "]"; }
Możesz wygenerować kod dla metody toString w Eclipse, klikając Źródło -> Generuj toString(). Zapewnia także kilka możliwości, takich jak wybór stylu kodu, czyli użycie operandu konkatenacji lub StringBuilder i tak dalej. Poniżej znajduje się wynik metody toString(), którą właśnie utworzyliśmy w Eclipse:
Country [name=India, capital=New Delhi, population=1200000000, independenceDay=Tue Jul 15 00:00:00 VET 1947]
Użycie ToStringBuilder do zastąpienia metody toString() języka Java
Oprócz wielu przydatnych klas, takich jak PropertyUtils , EqualsBuilder lub HashCodeBuilder, Apache udostępnia także ToStringBuilder, który może generować kod w celu wyprowadzenia metody toString() w kilku różnych stylach. Zobaczmy, jak wygląda wynik metody toString w prostym i wielowierszowym stylu: Prosty styl:
India,New Delhi,1200000000,Fri Aug 15 00:00:00 VET 1947
Styl wieloliniowy:
test.Country@f0eed6[
name=India
capital=New Delhi
population=1200000000
independenceDay=Fri Aug 15 00:00:00 VET 1947
]
NO_FIELD_NAMES_STYLE (styl bez nazw pól)
test.Country@1d05c81[India,New Delhi,1200000000,Fri Aug 15 00:00:00 VET 1947]
SHORT_PREFIX_STYLE (styl krótkiego przedrostka)
Country[name=India,capital=New Delhi,population=1200000000,independenceDay=Fri Aug 15 00:00:00 VET 1947]
ToStringStyle.DEFAULT_STYLE (styl domyślny)
test.Country@1d05c81[name=India,capital=New Delhi,population=1200000000,independenceDay=Fri Aug 15 00:00:00 VET 1947]
Podobna biblioteka open source firmy Google, Guava , udostępnia również wygodne API do generowania kodu dla metody toString w Javie.
Kiedy w Javie wywoływana jest metoda toString
toString jest dość specyficzną metodą i jest wywoływany z wielu metod JavaAPI, takich jak println(), printf() , rejestrowanie, instrukcje potwierdzania , debugery IDE, podczas drukowania kolekcji i podczas łączenia. Jeśli podklasa nie przesłania metody toString(), wówczas wywoływana jest domyślna implementacja zdefiniowana w klasie Object. Wielu programistów używa interfejsów API rejestrowania, takich jak Log4J lub java.util.Logger do generowania dzienników i często pomija tutaj obiekt.
logger.info("Customer not found:" + customer)
i jeśli Klient nie zastąpi toString i nie wyśle ważnych informacji, takich jak identyfikator klienta, nazwa klienta itp. wtedy będzie dość trudno zdiagnozować problem. Dlatego zawsze warto zastąpić toString w Javie. Przyjrzyjmy się niektórym korzyściom, jakie przyniesie takie rozwiązanie.
Korzyści z zastąpienia metody toString
- Jak omówiono powyżej, prawidłowo zastąpiony toString pomaga w debugowaniu , drukując ważne informacje.
- Jeśli w kolekcji przechowywany jest ważny obiekt, wydrukowanie kolekcji wywoła metodę toString przechowywanego obiektu, która może wydrukować ważne informacje. Klasycznym przykładem nieprzesłoniętej metody toString jest Array w Javie, która zamiast zawartości tablicy wypisuje wynik domyślnej implementacji. Chociaż istnieje kilka sposobów wydrukowania zawartości tablicy za pomocą Arrays.toString() i tym podobnych; ale ponieważ Array jest obiektem Java, byłoby znacznie lepiej, gdyby wiedział, jak się wydrukować, podobnie jak klasy kolekcji, takie jak List lub Set .
To tylko niektóre z korzyści, jakie uzyskasz wdrażając lub zastępując metodę toString w Javie . Jest o wiele więcej korzyści, które uzyskasz i nauczysz się sam. Mam nadzieję, że te wskazówki pomogą Ci w pełni wykorzystać implementacje toString. Daj nam znać, jeśli znasz jakieś unikalne sposoby pracy z toString, które pomogą Ci w aplikacjach Java.
GO TO FULL VERSION