Object Tostring w Javie

Object Tostring w Javie
W Javie obiekt jest instancją klasy lub jest tablicą. Istnieje klasa, obiekt. Tego obiektu nie należy mylić z obiektem, który jest instancją klasy. „Obiekt”, zaczynając od wielkich „o”, to nazwa klasy, klasy specjalnej. W Javie najwyższym przodkiem wszystkich klas jest ta klasa, obiekt. Obiekt można utworzyć w klasie, obiekt (opcjonalnie nazwany, z małymi literami, „O”). Jednak nie jest konieczne tworzenie instancji klasy specjalnej, obiektu. Wszystkie klasy, które są predefiniowane lub zdefiniowane przez programistę, są dziedziczone po tej klasie, obiekt.

Klasa obiektu ma metodę o nazwie toString (). Ta metoda zwraca reprezentację ciągu klasy normalnej klasy. Wszystkie klasy dziedziczą tę metodę od obiektu klasy. Każda tablica (jako obiekt) ma podobną metodę.

Niestety, ta przedstawienie obiektu jest krótkim kodem tekstowym (krótki tekst literalny). Nie jest to bardzo przydatne, choć można go dekodować. Takie dekodowanie nie jest adresowane w tym artykule. I tak programista musi zastąpić tę metodę, aby mieć reprezentację obiektu; Użytkownik komputera to doceni. Nadrzędne jest rozwiązane w tym artykule.

Domyślne zachowanie metody ToString ()

Prymitywne typy

Prymitywne typy, takie jak int, istnieją same w sobie. Jednak każdy pierwotny typ w Javie ma odpowiednią klasę (opakowanie). Jeśli chodzi o przekształcanie prymitywnych obiektów na struny, należy użyć odpowiednich klas. Poniższy program ilustruje to dla INT. Odpowiednia klasa dla INT to klasa liczb całkowitych.

Klasa publiczna THEClass
public static void main (string [] args)
Liczba całkowita w = 5;
String str = in.ToString ();
System.na zewnątrz.println (str);

Wyjście to 5. Gdyby „liczba całkowita” została wpisana jako int, wówczas komunikat o błędzie byłby wydany w czasie kompilacji. Zastosowano tutaj metodę TOSTRING () największej klasy przodków, bez żadnego problemu. To znaczy liczba całkowita 5 została przekonwertowana na ciąg i wydrukowano bez żadnego problemu. Gdyby jednak klasa była klasą zdefiniowaną przez programistę lub innym rodzajem predefiniowanej klasy, to byłby jakiś problem.

Klasa zdefiniowana przez programistę

Rozważ następujący program, który drukuje reprezentację zdefiniowanego przez programistę obiektu, OBJ:

klasa Aclass
int prop1 = 1;
int prop2 = 2;
void mthd ()
System.na zewnątrz.println („widziany”);


Klasa publiczna THEClass
public static void main (string [] args)
Aclass obj = new aclass ();
String str = obj.ToString ();
System.na zewnątrz.println (str);

Wyjście to:

Aclass@6ff3c5b5

To jest krótki kodowany tekst - niezbyt przydatny dla użytkownika. Użytkownik mógł preferować coś w stylu:

prop1 => 1;
prop2 => 2;

Są to różne właściwości (pola) i ich wartości. To, co oddziela właściwość od jej wartości w wydruku, to „=>”, co powinno zostać wprowadzone przez programistę. W takim pytaniu metody zwykle nie są drukowane.

Szyk

Rozważ następujący program, w którym tablica jako obiekt, ARR, należy wydrukować:

Klasa publiczna THEClass
public static void main (string [] args)
String [] arr = nowy String [] „One”, „dwa”, „trzy”;
String str = ARR.ToString ();
System.na zewnątrz.println (str);

Wyjście jest,

[Ljava.Lang.Ciąg;@D716361

który jest kolejnym kodem tekstowym. Czy tego chciałeś? Chciałbyś zobaczyć coś takiego:

raz Dwa Trzy

gdzie separator elementu jest „”,.

Lista

Rozważ następujący program, w którym należy wydrukować tablicę jako obiekt AL:

Importuj Java.Util.*;
Klasa publiczna THEClass
public static void main (string [] args)
ArrayList al = new ArrayList ();
glin.Dodaj jeden"); glin.Dodaj („dwa”); glin.Dodaj („trzy”);
String str = al.ToString ();
System.na zewnątrz.println (str);

Wyjście to:

[raz Dwa Trzy]

Wyjście jest całkiem dobre! Oznacza to, że programista nie musi zastępować obiektu.Metoda toString (), gdy dotyczy tablicy (lub ogólnie możliwej listy). Jednak jeśli chodzi o obiekty zdefiniowane przez programistę lub tablicę, programista musi zastąpić metodę.

Mapa

Rozważ następujący program, w którym Hashmap jako obiekt, HM, należy wydrukować:

Importuj Java.Util.*;
Klasa publiczna THEClass
public static void main (string [] args)
Hashmap hm = new Hashmap ();
Hm.Put („jeden”, 1); Hm.Put („dwa”, 2); Hm.Put („trzy”, 3);
String str = hm.ToString ();
System.na zewnątrz.println (str);

Wyjście to:

One = 1, dwa = 2, trzy = 3

Wyjście jest całkiem dobre! Pary klucza/wartości są rozróżnialne, z separatorem elementu, jest „”, ”. Oznacza to, że programista nie musi zastępować obiektu.Metoda toString (), gdy dotyczy ona hashmap (lub ogólnie możliwej mapy). Jednak jeśli chodzi o obiekty zdefiniowane przez programistę lub tablicę, programista musi zastąpić metodę.

Reszta tego artykułu dotyczy nadrzędnego obiektu.toString () odziedziczona metoda obiektu zdefiniowanego przez programistę i tablicy.

Zastępowanie toString ()

Szyk

Z tablicą dzisiaj nadrzędne jest pośrednio lub obejście. Java ma klasę o nazwie tablice. Ta klasa ma metodę toString, już zastąpioną przez Java. W klasie metoda toString () jest statyczna: oznacza to, że klasa tablic nie musi być utworzona, aby zastosować metodę toString (). Tutaj metoda toString () przyjmuje argument, który jest identyfikatorem tablicy. Wytwarza wyjście, w którym separator jest „”,. Tablice klasowe, jest w Javie.Util.* pakiet. Poniższy program pokazuje obejście tablic:

Importuj Java.Util.*;
Klasa publiczna THEClass
public static void main (string [] args)
Double [] arr = nowy double [] 10.1, 20.2, 30.3;
String Str = tablice.ToString (ARR);
System.na zewnątrz.println (str);

Wyjście to:

[10.1, 20.2, 30.3]

Wyjście jest całkiem dobre! I tak, dziś programista nie musi już kodować metody nadrzędnej, dla metody toString () dla tablicy Java. Programista wykonuje obejście z tablicami i jego toString ().

Obiekt zdefiniowany przez programistę

Z klasą zdefiniowaną programistą, metodą TOSTRING () klasy obiektowej, musi zostać po prostu na nowo zdefiniowana, jak pokazano w następującej klasie zdefiniowanej programisty:

klasa Aclass
int prop1 = 1;
int prop2 = 2;
void mthd ()
System.na zewnątrz.println („widziany”);

@Nadpisanie
public String ToString ()
String str1 = "prop1 =>" + to.prop1;
String str2 = "prop2 =>" + to.prop2;
return str1 + '\ n' + str2;

Technika polega na użyciu operatora konatenacji strun, + do łączenia literałów bez strasowania z literałami smyczkowymi. Poprzedni „@Override” zapobiega pewnym błędom w metodzie zastąpionej. Redefinicja tutaj jest nadrzędna. Klasa zdefiniowana przez programista odpowiada obiektowi zdefiniowanemu przez programistę. Poniższa metoda Java main () jest odpowiednia dla powyższej klasy:

Klasa publiczna THEClass
public static void main (string [] args)
Aclass obj = new aclass ();
String str = obj.ToString ();
System.na zewnątrz.println (str);

Wyjście to:

prop1 => 1
prop2 => 2

To wyjście jest lepiej doceniane przez użytkownika niż krótki kod tekstowy „ACLASS@6FF3C5B5”. Nie zapominaj, że nadrzędna definicja odbywa się w klasie zainteresowania.

Wniosek

Klasa obiektu ma metodę o nazwie toString (). Ta metoda zwraca reprezentację ciągu klasy klasy. Wszystkie klasy dziedziczą tę metodę od obiektu klasy. Każda tablica (jako obiekt) ma podobną metodę. Każda klasa wymaga zastąpienia tej metody, pośrednio lub bezpośrednio.

Z prymitywnymi typami użyj typów referencyjnych (e.G., Liczba całkowita dla INT), gdzie Java ma już predefiniowaną zastąpioną metodę toString (), co jest zadowalające. Z listami i mapami, Java ma już z góry określoną metodę toString (), która jest zadowalająca. Za pomocą tablicy zrób obejście: Użyj metody TOSTRING () Klasy tablic. Z klasą zdefiniowaną przez programistę, wykonaj rzeczywiste nadrzędne, za pomocą operatora konatenacji ciągów, +, tak często, jak to możliwe.