Metoda Java toString
toString
Metoda w Javie służy do zapewnienia jasnych i wystarczających informacji o obiekcie ( Object
) w formie czytelnej dla człowieka. Właściwe nadpisanie metody toString
może pomóc w logowaniu i debugowaniu programu Java, dostarczając cennych i ważnych informacji. Ponieważ toString()
jest zdefiniowana w java.lang.Object
klasie, a jej domyślna implementacja nie dostarcza zbyt wielu informacji, zawsze najlepszą praktyką jest zastąpienie tej metody w klasie potomnej. W rzeczywistości, jeśli tworzysz ważną lub ogólną klasę typu lub Order
, zawsze zastępuj równania , hashCode , CompareTo i metody w Javie. Domyślnie implementacja generuje wynik w postaci , na przykład w naszym przykładzie metoda klasy wyświetli test.Country@18e2b22 gdzie 18e2b22 to kod skrótu obiektu w formacie szesnastkowym. Jeśli wywołasz metodę hashCode , zwróci 260943370, który jest dziesiętny odpowiednik 18e2b22. Informacje te nie są szczególnie przydatne przy wyszukiwaniu problemu. Spójrzmy na przykład z życia wzięty, w którym trzeba znaleźć problem z połączeniem sieciowym. W przypadku, gdy chcesz wiedzieć, z jakim hostem i portem próbuje się połączyć Twój system, i czy drukuje lub tylko domyślne informacje, będzie to nie można sobie wyobrazić prawdziwego problemu, ale przy zastąpionej implementacji mogą dostarczyć przydatnych informacji, takich jak nazwa hosta i numer portu. W tym samouczku Java podamy kilka wskazówek dotyczących zastępowania metod za pomocą przykładów kodu. Trade
Employee
toString
toString
package.class@hashCode
toString()
toString()
Country
Socket
ServerSocket
toString
toString
toString
Jak zastąpić metodę toString w Javie:
Drukuje sformatowaną datę (tj. dzień/miesiąc/rok) zamiast wartości surowej. Jest to bardzo przydatna wskazówka podczas zastępowania metody JavatoString
. Zwykła toString()
klasa java.util.Date
nie wyświetla sformatowanej daty i zawiera wiele szczegółów, które nie zawsze są potrzebne. Jeśli używasz częściowego DateFormat, tj. dd-MM-rr w swojej aplikacji, to zdecydowanie chciałbyś zobaczyć ten format zamiast domyślnego. IDE zwykle nie generuje sformatowanych danych wyjściowych Date
i jest to coś, co musisz zrobić sam, ale warto. Przeczytaj Jak wydrukować datę w formacie ddMMyy w Javie, aby uzyskać szczegółowe informacje na temat formatowania Date
w Javie. Możesz także użyć do tego klasy SimpleDataFormat lub biblioteki czasu Joda Date.
Dokumentowanie formatu toString
Jeśli Twoja metodatoString()
nie generuje danych w postaci pole=wartość, dobrym pomysłem jest udokumentowanie formatu wyjściowego toString
, szczególnie w przypadku ważnych obiektów, takich jak Pracownik lub Student. Na przykład, jeśli metoda toString()
klasowa Работник(Employee)
wypisuje „ John-101-Sales-9846387321 ”, dobrą praktyką byłoby określenie formatu jako „nazwisko-id-kontakt z działem”, ale jednocześnie nie pozwalaj klientowi na uzyskanie informacji z metody toString()
, należy zawsze podać odpowiednie metody odzyskiwania danych, takie jak getName()
, getId()
, getContact()
itd., ponieważ informacje uzyskane z toString()
reprezentacji obiektowej są delikatne i podatne na błędy, dlatego klient powinien zawsze mieć czystą ścieżkę do uzyskania Informacja.
Użyj StringBuilder, aby skomponować dane wyjściowe toString()
Jeśli piszesz kod metodytoString()
w Javie, użyj StringBuilder, aby dodać poszczególne atrybuty. Jeśli używasz IDE, takiego jak Eclipse , Netbeans lub IntelliJ, wówczas dobrym rozwiązaniem jest również użycie StringBuilder
metody and append()
zamiast operatora + do komponowania . toString
Domyślnie zarówno Eclipse, jak i Netbeans generują toString
za pomocą operatora konkatenacji.
Korzystanie z adnotacji @Override
Stosowanie przesłaniania@Override
metod w Javie jest jedną z najlepszych praktyk w tym języku. Ale ta wskazówka nie jest tak ważna, jak byłaby w przypadku przesłaniania metod equals()
i compareTo()
, ponieważ przeciążenie zamiast przesłaniania może spowodować bardziej subtelne błędy, które są trudne do obliczenia. W każdym razie lepiej jest użyć adnotacji @Overrride
.
Drukowanie zawartości tablicy zamiast drukowania obiektu tablicy
Tablica jest obiektem w Javie, ale nie zastępuje metodytoString
, a podczas drukowania tablicy domyślny format wyjściowy nie jest zbyt przydatny, ponieważ chcielibyśmy zobaczyć zawartość tablicy. Nawiasem mówiąc, jest to kolejny powód , dla którego tablica char[] jest lepsza niż String do przechowywania wrażliwych danych, takich jak hasło. Poświęć trochę czasu i sprawdź, czy wydrukowanie zawartości tablicy pomaga Twoim klientom, czy nie, i jeśli ma to sens, wydrukuj zawartość tablicy zamiast samego obiektu. Ze względu na wydajność lepiej jest używać Collection
takiego ArrayList
lub HashSet do Array
przechowywania innych obiektów.
Dodatkowe wskazówki
Kilka dodatkowych wskazówek na temat przesłaniania metodtoString
w Javie.
-
Drukuj wydruk
toString
w wielu wierszach lub w jednym, w zależności od jego długości. -
Uwzględnij w reprezentacji w pełni kwalifikowane nazwy klas
toString
, innymi słowy,package.class
aby uniknąć nieporozumień. -
Możesz pominąć wartości null lub je pokazać, ale lepiej je pokazać. Czasami są przydatne, ponieważ pokazują, które pole jest obecne
null
podczas jakiegoś zdarzenia, na przykład NullPointerException . -
Użyj na przykład formatu klucz-wartość,
member.name=member.value
większość IDE to obsługuje. -
Uwzględnij dziedziczone elementy członkowskie, jeśli uważasz, że powinny dostarczyć niezbędnych informacji klasie dziedziczącej.
-
Czasami obiekt zawiera wiele opcjonalnych i wymaganych parametrów, jak pokazaliśmy w naszym przykładzie szablonu Buildera , gdy wydrukowanie wszystkich pól jest prawie niemożliwe, w tym przypadku możemy wydrukować tylko wymagane pola, zwłaszcza że mamy pola opcjonalne.
GO TO FULL VERSION