Kadalasan habang lumilikha ng isang programa, kinakailangan upang malaman ang mga nilalaman ng isang bagay. Para sa mga layuning ito, ang klase ng Java Object , ang pinakapangunahing klase ng Java sa hierarchy ng klase, ay tumutukoy ng isang espesyal na paraan ng toString() . Nagbabalik ito ng string ng character na naglalarawan sa bagay. Ang default na pagpapatupad ng toString() na pamamaraan sa Java ay gumagawa ng output tulad nito:
package.class@hashCode
ie toString , na tinukoy sa java.lang.Object ay nagbibigay ng hash code ng object sa hexadecimal form. Ito ay madalas na hindi masyadong malinaw at kapaki-pakinabang. Kaya kapag gumagawa ng bagong klase, kaugalian na i-override ang toString() upang ang return string ay naglalaman ng pangalan ng klase, mga pangalan at mga halaga ng lahat ng mga variable. Ang wastong pag-override sa paraan ng toString ay makakatulong sa pag-log at pag-debug ng isang Java program, nagbibigay ito ng mahalaga at mahalagang impormasyon. Sa madaling salita, ang toString() na paraan ay ginagamit sa Java upang makakuha ng string object na kumakatawan sa halaga ng isang numeric na bagay. Sa madaling salita, kino-convert nito ang isang numero sa isang string. Kung ang pamamaraan ay tumatagal ng isang simpleng uri ng data bilang isang argumento, pagkatapos ay ibabalik ang isang string object na kumakatawan sa halaga ng simpleng uri ng data.
Halimbawa ng Java toString() method
Karaniwan kung lumikha ka ng isang klase, bilang karagdagan sa toString() na pamamaraan sa Java kailangan mong i-override ang equals , hashCode at compareTo na mga pamamaraan upang malaman kung paano magtrabaho kasama ang mga bagay nito. Ngunit sa ngayon, tumuon tayo sa toString . Sa karamihan ng mga kaso, ang pagsusumite ng tekstong impormasyon tungkol sa isang bagay ay medyo simple. Kailangan mo lang maunawaan kung ano ang eksaktong gustong makita ng user kapag nagla-log. Magbigay tayo ng isang halimbawa at lumikha ng isang Klase na naglalarawan ng isang punto sa eroplano. Mayroon itong dalawang coordinate: coordinateX, coordinateY. Natural, dapat silang ipakita sa screen kung ang isang user ay nagtanong ng "anong bagay ito" tulad ng pangalan ng klase mismo. Ito ang ipapakita namin sa overridden na toString() na paraan. Ngayon ay nilikha namin ang klase mismo, ang mga patlang nito (mga coordinate), isang tagabuo, mga getter para sa pagkuha ng mga coordinate (sigurado, posible na huwag lumikha ng mga ito, ngunit mula sa pananaw ng tamang paggamit ng OOP, ang mga getter ay mahusay na kasanayan). Para lang ilarawan, gumawa din tayo ng paraan na lumilikha ng bagong punto — ang kabuuan ng dalawa pang iba, at i-override din ang equals at hashCode na mga pamamaraan.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;
}
Ngayon, lumikha tayo ng isang klase ng pagsubok at isang pangunahing pamamaraan. Mayroon kaming dalawang puntos at ang pangatlo, na nakukuha namin mula sa pagsasama-sama ng dalawang puntos. Inilapat namin ang paraan ng toString sa puntong ito at i-print ito.
//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());
}
}
Ang resulta ng gawain ng programang ito ay nasa ibaba:
Punto{X: 3, Y: 15}
Hindi mo talaga kailangang tahasang tawagan ang paraan ng toString , at kadalasan ay hindi. Para tawagan ang toString() method, ipasa lang ang gustong object sa System.out.println . Kaya ang aming klase sa pagsusulit ay magiging ganito:
//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);
}
}
Ang output ng programa ay kapareho ng dati. Paano kung hindi namin i-override ang toString na paraan, ngunit nais na i-print ang bagay? Sa kasong ito, tatawagin ang toString method ng Object class. Sa aming halimbawa, kung aalisin namin ang paraan ng toString mula sa aming klase ng Point , at iiwan ang lahat tulad ng nasa klase ng pagsubok, makukuha namin ang sumusunod na resulta:
Punto@12
Dito nakuha namin ang hash code ng object sa hexadecimal.