カスタム クラスのオブジェクトをいくつか作成し、それらに異なる属性を割り当てました。次に、これらの各オブジェクトをベクターに追加しましたが、ベクターの要素を出力しようとすると、オブジェクトの属性ではなく、オブジェクトへの参照だけが取得されます。
5 に答える
(または同様のメソッド) を呼び出しSystem.out.println()
てクラスのインスタンスへの参照を渡すと、そのクラスのtoString()
メソッドへの暗黙的な呼び出しが行われます。あなたが見ているのは、クラスtoString()
から継承されたデフォルトの実装です。Object
toString()
出力を変更したい場合は、必要な情報を返す独自の実装をクラスに提供するだけです。
強化されたfor
loopでそれらにアクセスできます:
Vector<YourObject> vector = ...;
for(YourObject obj : vector)
{
System.out.println(obj.YOUR_METHOD_OR_ATTRIBUTE);
}
または使用してelementAt(position)
:
System.out.println(vector.elementAt(position).YOUR_METHOD_OR_ATTRIBUTE);
または最後に、toString()
メソッドをオーバーライドして使用します。
System.out.println(vector.elementAt(position));
ベクターでジェネリックを使用することが重要です。そうしないと、キャストしない限り、java.lang.Object 型のオブジェクトが取得されます。
したがって、次のように定義します。
Vector<MyObject> vector = new Vector<MyObject>();
それ以外の
Vector vector = new Vector();
任意のクラスのインスタンスを出力すると、クラスの toString() メソッドObject
が呼び出されます。
toString
Custom クラスのメソッドをオーバーライドし、必要な属性を出力する必要があります。その後、 toStringtoString()
の代わりにメソッドが呼び出されます。Object's
または、getter
メソッドを用意して、各インスタンスでそれを呼び出すことができます
public class Custom {
private String attr;
public String getAttr() {
return this.attr;
}
@Override
public String toString() {
return attr;
}
}
次に、インスタンスを印刷すると、toString()
が呼び出され、attr
値が印刷されます。
Vector<Custom> yourVector = ...;
for (Custom val: yourVector) {
System.out.println(val); // Will invoke `toString()` and print attr value.
System.out.println(val.getAttr()); // Prints attr value
}
を使用している場合System.out.println(v)
、v はof 要素の場合、カスタム オブジェクトVector
のメソッドを実装する必要があります。toString()
このようにして、現在取得しているデフォルトの Object#toString() 動作をオーバーライドします。