0

カスタム クラスのオブジェクトをいくつか作成し、それらに異なる属性を割り当てました。次に、これらの各オブジェクトをベクターに追加しましたが、ベクターの要素を出力しようとすると、オブジェクトの属性ではなく、オブジェクトへの参照だけが取得されます。

4

5 に答える 5

3

(または同様のメソッド) を呼び出しSystem.out.println()てクラスのインスタンスへの参照を渡すと、そのクラスのtoString()メソッドへの暗黙的な呼び出しが行われます。あなたが見ているのは、クラスtoString()から継承されたデフォルトの実装です。Object

toString()出力を変更したい場合は、必要な情報を返す独自の実装をクラスに提供するだけです。

于 2012-10-10T10:02:35.433 に答える
2

強化されたforloopでそれらにアクセスできます:

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));
于 2012-10-10T10:01:40.813 に答える
1

ベクターでジェネリックを使用することが重要です。そうしないと、キャストしない限り、java.lang.Object 型のオブジェクトが取得されます。

したがって、次のように定義します。

Vector<MyObject> vector = new Vector<MyObject>();

それ以外の

Vector vector = new Vector();
于 2012-10-10T10:09:54.850 に答える
1

任意のクラスのインスタンスを出力すると、クラスの toString() メソッドObjectが呼び出されます。

toStringCustom クラスのメソッドをオーバーライドし、必要な属性を出力する必要があります。その後、 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
}
于 2012-10-10T10:03:00.533 に答える
0

を使用している場合System.out.println(v)、v はof 要素の場合、カスタム オブジェクトVectorのメソッドを実装する必要があります。toString()このようにして、現在取得しているデフォルトの Object#toString() 動作をオーバーライドします。

于 2012-10-10T10:04:52.670 に答える