クラスtoString()で定義されているメソッドの概念を誰かに説明できますObjectか?それはどのように使用され、その目的は何ですか?
クラスtoString()で定義されているメソッドの概念を誰かに説明できますObjectか?それはどのように使用され、その目的は何ですか?
回答:
Object.toStringドキュメントから:
オブジェクトの文字列表現を返します。一般に、
toStringメソッドはこのオブジェクトを「テキストで表す」文字列を返します。結果は、簡潔でありながら有益な表現で、人が読みやすいものでなければなりません。すべてのサブクラスがこのメソッドをオーバーライドすることをお勧めします。
toStringclass のメソッドはObject、オブジェクトがインスタンスであるクラスの名前、アットマーク文字 `@ '、およびオブジェクトのハッシュコードの符号なし16進表記で構成される文字列を返します。つまり、このメソッドは次の値に等しい文字列を返します。
getClass().getName() + '@' + Integer.toHexString(hashCode())
例:
String[] mystr ={"a","b","c"};
System.out.println("mystr.toString: " + mystr.toString());
output:- mystr.toString: [Ljava.lang.String;@13aaa14a
の使用String.toString:
Stringフォームでvalueというコンストラクタを調べる必要があるときはいつでも、単純にString.toString...例を使用できます...
package pack1;
import java.util.*;
class Bank {
String n;
String add;
int an;
int bal;
int dep;
public Bank(String n, String add, int an, int bal) {
this.add = add;
this.bal = bal;
this.an = an;
this.n = n;
}
public String toString() {
return "Name of the customer.:" + this.n + ",, "
+ "Address of the customer.:" + this.add + ",, " + "A/c no..:"
+ this.an + ",, " + "Balance in A/c..:" + this.bal;
}
}
public class Demo2 {
public static void main(String[] args) {
List<Bank> l = new LinkedList<Bank>();
Bank b1 = new Bank("naseem1", "Darbhanga,bihar", 123, 1000);
Bank b2 = new Bank("naseem2", "patna,bihar", 124, 1500);
Bank b3 = new Bank("naseem3", "madhubani,bihar", 125, 1600);
Bank b4 = new Bank("naseem4", "samastipur,bihar", 126, 1700);
Bank b5 = new Bank("naseem5", "muzafferpur,bihar", 127, 1800);
l.add(b1);
l.add(b2);
l.add(b3);
l.add(b4);
l.add(b5);
Iterator<Bank> i = l.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
}
}
...このプログラムをEclipseにコピーして実行してください...についてのアイデアが得られString.toStringます...
toStringUIの目的には適さず、適切ではないことをご理解いただければ幸いです。
toStringGUIでオブジェクトを表示するために使用している理由を説明していますか?リッチオブジェクトがあり、それをGUIに表示したい場合、いいえ、そのための追加のレンダラーを作成したり、オブジェクトから文字列プロパティを抽出してGUIでそれを使用したりしません。シンプルで実装toStringして、そのすべてのオーバーヘッドを回避できるようにします。これをよりクリーンな方法で行う場合は、UI専用のラッパークラスを作成し、そのtoStringメソッドを実装してラッパーの文字列プロパティを返します。
このtoString()メソッドは、オブジェクトのテキスト表現を返します。基本的な実装は既に含まれjava.lang.Objectているため、すべてのオブジェクトがjava.lang.Objectそれを継承するため、Javaのすべてのオブジェクトがこのメソッドを持つことが保証されます。
デバッガーはtoString()メソッドの結果によってオブジェクトを表示することが多いため、特にデバッグに関しては、メソッドをオーバーライドすることは常に良い考えです。したがって、意味のある実装を使用しますが、技術的な目的で使用してください。アプリケーションロジックはゲッターを使用する必要があります。
public class Contact {
private String firstName;
private String lastName;
public Contact (String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {return firstName;}
public String getLastName() {return lastName;}
public String getContact() {
return firstName + " " + lastName;
}
@Override
public String toString() {
return "["+getContact()+"]";
}
}
オプションでアプリケーションのコンテキスト内で使用できますが、はるかに多くの場合、デバッグ目的で使用されます。たとえば、IDEでブレークポイントにtoString()到達すると、メンバーを検査するよりも、意味のあるオブジェクトを読み取る方がはるかに簡単です。
toString()メソッドが何をすべきかについては、一定の要件はありません。慣例により、ほとんどの場合、クラスの名前と関連するデータメンバーの値がわかります。多くの場合、toString()メソッドはIDEで自動生成されます。
toString()メソッドからの特定の出力に依存したり、プログラム内でそれを解析することは悪い考えです。何をするにしても、その道を進んではいけません。
toString()は、オブジェクトの文字列/テキスト表現を返します。一般に、デバッグ、ロギングなどの診断目的で使用されます。toString()メソッドは、オブジェクトに関する意味のある詳細を読み取るために使用されます。
オブジェクトがprintln、print、printf、String.format()、assert、または文字列連結演算子に渡されると、自動的に呼び出されます。
クラスObjectのtoString()のデフォルト実装は、このオブジェクトのクラス名と、それに続く@記号、および次のロジックを使用したこのオブジェクトのハッシュコードの符号なし16進表記で構成される文字列を返します。
getClass().getName() + "@" + Integer.toHexString(hashCode())
たとえば、次の
public final class Coordinates {
private final double x;
private final double y;
public Coordinates(double x, double y) {
this.x = x;
this.y = y;
}
public static void main(String[] args) {
Coordinates coordinates = new Coordinates(1, 2);
System.out.println("Bourne's current location - " + coordinates);
}
}
プリント
Bourne's current location - Coordinates@addbf1 //concise, but not really useful to the reader
次に、CoordinatesクラスのtoString()を次のようにオーバーライドします。
@Override
public String toString() {
return "(" + x + ", " + y + ")";
}
結果は
Bourne's current location - (1.0, 2.0) //concise and informative
これらのオブジェクトへの参照を含むコレクションでメソッドが呼び出されると、toString()をオーバーライドすることの有用性がさらに高まります。たとえば、次の
public static void main(String[] args) {
Coordinates bourneLocation = new Coordinates(90, 0);
Coordinates bondLocation = new Coordinates(45, 90);
Map<String, Coordinates> locations = new HashMap<String, Coordinates>();
locations.put("Jason Bourne", bourneLocation);
locations.put("James Bond", bondLocation);
System.out.println(locations);
}
プリント
{James Bond=(45.0, 90.0), Jason Bourne=(90.0, 0.0)}
これの代わりに、
{James Bond=Coordinates@addbf1, Jason Bourne=Coordinates@42e816}
いくつかの実装ポインタ、
返される文字列に含まれるすべてのインスタンスフィールドにアクセサ/ゲッターを提供します。たとえば、Coordinatesクラスでは、
public double getX() {
return x;
}
public double getY() {
return y;
}toString()メソッドの包括的な説明は、Josh Bloch著の本、Effective Java™、Second EditionのItem 10にあります。
コーディング:
public class Test {
public static void main(String args[]) {
ArrayList<Student> a = new ArrayList<Student>();
a.add(new Student("Steve", 12, "Daniel"));
a.add(new Student("Sachin", 10, "Tendulkar"));
System.out.println(a);
display(a);
}
static void display(ArrayList<Student> stu) {
stu.add(new Student("Yuvi", 12, "Bhajji"));
System.out.println(stu);
}
}
Student.java:
public class Student {
public String name;
public int id;
public String email;
Student() {
}
Student(String name, int id, String email) {
this.name = name;
this.id = id;
this.email = email;
}
public String toString(){ //using these toString to avoid the output like this [com.steve.test.Student@6e1408, com.steve.test.Student@e53108]
return name+" "+id+" "+email;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
public String getEmail(){
return email;
}
public void setEmail(String email){
this.email=email;
}
}
出力:
[スティーブ12ダニエル、サチン10テンダルカー]
[スティーブ12ダニエル、サチン10テンドゥルカル、ユビ12バウジ]
Pojo(Student.java)クラスでtoString()を使用していない場合、のような出力が得られます[com.steve.test.Student@6e1408, com.steve.test.Student@e53108]。この種の問題を回避するために、toString()メソッドを使用しています。
StringコンテキストでObject(Stringではない)にアクセスすると、コンパイラによって内部でtoString()が呼び出されます。
これが理由です
Map map = new HashMap();
System.out.println("map=" + map);
動作し、独自のクラスのObjectから標準のtoString()をオーバーライドすることにより、オブジェクトをStringコンテキストでも使用できるようにすることができます。
(そして、それをブラックボックスと見なしてください。決して、コンテンツを人間に提示する以外の目的で使用しないでください)
/**
* This toString-Method works for every Class, where you want to display all the fields and its values
*/
public String toString() {
StringBuffer sb = new StringBuffer();
Field[] fields = getClass().getDeclaredFields(); //Get all fields incl. private ones
for (Field field : fields){
try {
field.setAccessible(true);
String key=field.getName();
String value;
try{
value = (String) field.get(this);
} catch (ClassCastException e){
value="";
}
sb.append(key).append(": ").append(value).append("\n");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return sb.toString();
}