JavaRush /Blog Java /Random-PL /10 wskazówek dotyczących zastępowania metody toString() w...
Ku6ep
Poziom 35

10 wskazówek dotyczących zastępowania metody toString() w Javie (część 1)

Opublikowano w grupie Random-PL
10 wskazówek dotyczących zastępowania metody toString() w Javie — ToStringBuilder Netbeans Eclipse 10 wskazówek dotyczących zastępowania metody toString() w Javie (część 1) - 1

Metoda Java toString

toStringMetoda 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 toStringmoże pomóc w logowaniu i debugowaniu programu Java, dostarczając cennych i ważnych informacji. Ponieważ toString()jest zdefiniowana w java.lang.Objectklasie, 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. TradeEmployeetoStringtoStringpackage.class@hashCodetoString()toString()CountrySocketServerSockettoStringtoStringtoString

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 Java toString. Zwykła toString()klasa java.util.Datenie 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 Datei 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 Datew Javie. Możesz także użyć do tego klasy SimpleDataFormat lub biblioteki czasu Joda Date.

Dokumentowanie formatu toString

Jeśli Twoja metoda toString()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 metody toString()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 StringBuildermetody and append()zamiast operatora + do komponowania . toStringDomyślnie zarówno Eclipse, jak i Netbeans generują toStringza pomocą operatora konkatenacji.

Korzystanie z adnotacji @Override

Stosowanie przesłaniania @Overridemetod 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 metody toString, 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ć Collectiontakiego ArrayListlub HashSet do Arrayprzechowywania innych obiektów.

Dodatkowe wskazówki

Kilka dodatkowych wskazówek na temat przesłaniania metod toStringw Javie.
  1. Drukuj wydruk toStringw wielu wierszach lub w jednym, w zależności od jego długości.

  2. Uwzględnij w reprezentacji w pełni kwalifikowane nazwy klas toString, innymi słowy, package.classaby uniknąć nieporozumień.

  3. Możesz pominąć wartości null lub je pokazać, ale lepiej je pokazać. Czasami są przydatne, ponieważ pokazują, które pole jest obecne nullpodczas jakiegoś zdarzenia, na przykład NullPointerException .

  4. Użyj na przykład formatu klucz-wartość, member.name=member.valuewiększość IDE to obsługuje.

  5. Uwzględnij dziedziczone elementy członkowskie, jeśli uważasz, że powinny dostarczyć niezbędnych informacji klasie dziedziczącej.

  6. 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.

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