CodeGym /Blog Java /Random-PL /Metoda Java toString().
John Squirrels
Poziom 41
San Francisco

Metoda Java toString().

Opublikowano w grupie Random-PL
Dość często podczas tworzenia programu konieczne jest poznanie zawartości obiektu. W tym celu klasa Java Object , najbardziej podstawowa klasa Java w hierarchii klas, definiuje specjalną metodę toString() . Zwraca ciąg znaków opisujący obiekt. Domyślna implementacja metody toString() w Javie generuje następujące dane wyjściowe:
package.class@hashCode
tj. toString , który został zdefiniowany w java.lang.Object podaje kod skrótu obiektu w postaci szesnastkowej. Często nie jest to zbyt jasne i przydatne. Dlatego też podczas tworzenia nowej klasy zwyczajowo nadpisuje się funkcję toString() w taki sposób, że zwracany ciąg znaków zawiera nazwę klasy, nazwy i wartości wszystkich zmiennych. Poprawne nadpisanie metody toString może pomóc w logowaniu i debugowaniu programu Java, dostarcza cennych i ważnych informacji. Mówiąc najprościej, metoda toString() jest używana w Javie w celu uzyskania obiektu typu string reprezentującego wartość obiektu numerycznego. Innymi słowy, konwertuje liczbę na ciąg znaków. Jeśli metoda przyjmuje jako argument prosty typ danych, zwracany jest obiekt typu string, który reprezentuje wartość prostego typu danych.

Przykład metody Java toString().

Zwykle, jeśli tworzysz klasę, oprócz metody toString() w Javie musisz zastąpić metody równości , hashCode i CompareTo , aby wiedzieć, jak pracować z jej obiektami. Ale na razie skupmy się na toString . W większości przypadków przesłanie informacji tekstowych o obiekcie jest dość proste. Musisz tylko zrozumieć, co dokładnie użytkownik chciałby zobaczyć podczas logowania. Podajmy przykład i utwórzmy klasę opisującą punkt na płaszczyźnie. Ma dwie współrzędne: współrzędnaX, współrzędnaY. Naturalnie powinny zostać wyświetlone na ekranie, jeśli użytkownik zapyta „co to za obiekt”, podobnie jak sama nazwa klasy. To właśnie zademonstrujemy w zastąpionej metodzie toString() . Teraz tworzymy samą klasę, jej pola (współrzędne), konstruktor, gettery do uzyskiwania współrzędnych (oczywiście, można ich nie tworzyć, ale z punktu widzenia prawidłowego użycia OOP, gettery są dobrą praktyką). Aby to zilustrować, utwórzmy także metodę, która utworzy nowy punkt — sumę dwóch pozostałych, a także nadpisze metody równości i hashCode .
public class Point implements Comparable<Point> {
   private final int coordinateX;
   private final int coordinateY;

   public Point(final int coordinateX, final int coordinateY) {
       this.coordinateX = coordinateX;
       this.coordinateY = coordinateY;
   }

   public int getX() {
       return coordinateX;
   }

   public int getY() {
       return coordinateY;
   }

   public Point sum(final Point that) {
       return new Point(coordinateX + that.coordinateX, coordinateY + that.coordinateY);
   }

// here we override toString with coordinates and class name
   @Override
   public String toString() {
       return "Point{"
               + "X: " + getX()
               + ", Y: " + getY()
               +  '}';
   }

   @Override
   public boolean equals(Object o) {
       if (o == this) {
           return true;
       }
       if (o == null || o.getClass() != this.getClass()) {
           return false;
       }

   @Override
   public int hashCode() {
       return coordinateX + coordinateY;

   }
Stwórzmy teraz klasę testową i metodę główną. Tam mamy dwa punkty i trzeci, który otrzymujemy z sumy dwóch punktów. Stosujemy w tym miejscu metodę toString i ją drukujemy.
//toString() method demo
public class Test {
   public static void main(String[] args) {
       Point myPoint1 = new Point(5,7);
       Point myPoint2 = new Point(-2, 8);
       Point mySum = myPoint1.sum(myPoint2);
     //call toString explicitly
       System.out.println(mySum.toString());
   }
}
Efekt pracy tego programu poniżej:
Punkt{X: 3, Y: 15}
W rzeczywistości nie musisz jawnie wywoływać metody toString i najczęściej tego nie robi. Aby wywołać metodę toString() , po prostu przekaż żądany obiekt do System.out.println . Zatem nasza klasa testowa będzie wyglądać następująco:
//toString method demo
public class Test {
   public static void main(String[] args) {
       Point myPoint1 = new Point(5,7);
       Point myPoint2 = new Point(-2, 8);
       Point mySum = myPoint1.sum(myPoint2);
       //call toString implicitly
       System.out.println(mySum);
   }
}
Dane wyjściowe programu są takie same jak poprzednio. A co jeśli nie zastąpimy metody toString , ale chcemy wydrukować obiekt? W tym przypadku zostanie wywołana metoda toString klasy Object . W naszym przykładzie, jeśli usuniemy metodę toString z naszej klasy Point i pozostawimy wszystko tak, jak jest w klasie testowej, otrzymamy następujący wynik:
Punkt@12
Tutaj mamy kod skrótu obiektu w postaci szesnastkowej.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION