12

私はJavaで、必要に応じていくつかの「コンテナ」クラスを作成する必要があるプロジェクトに取り組んでいます。これは1つの簡単なバージョンです:

public class Pair{

    Object KEY;
    Object VALUE;

    public Pair(Object k, Object v)
    {
        KEY = k;
        VALUE = v;
    }

    public Object getKey()
    { return KEY; }
    public Object getValue()
    { return VALUE; }
}

(これは大幅に簡略化されており、最終バージョンでは適切なset / getメソッドを使用していることに注意してください。)

私の質問はこれです:

ArrayListをパラメーターとしてprintlnメソッドを呼び出す場合、次に例を示します。

ArrayList<String> arr = new ArrayList<String>();
arr.add("one");
arr.add("two");
System.out.println(arr);

Javaは、ArrayListの各「ノード」または要素を正しく出力する方法を自動的に認識します。

printlnメソッドがPairクラスを正しく出力できるようにするメソッドを作成する方法はありますか?

4

6 に答える 6

20

メソッドをオーバーライドして、必要なtoString文字列表現を返す必要があります。

たとえば、次のようになります。

public class Pair {

    Object key;
    Object value;

    public Pair(Object k, Object v)
    {
        key = k;
        value = v;
    }

    public Object getKey() { 
        return key; 
    }

    public Object getValue() { 
        return value; 
    }

    public String toString() {
        return "Key: " + getKey() + ", Value: " + getValue();
    }
}

次のことができます。

List<Pair> pairs = new ArrayList<Pair>();
pairs.Add(new Pair("pair1key", "pair1value"));
pairs.Add(new Pair("pair2key", "pair2value"));

for (Pair p : pairs) {
    System.out.println(p);
}
于 2011-11-03T20:51:17.500 に答える
5

オーバーライドする必要がありますtoString():

public class Pair
{
    KeyObject key;
    ValueObject value;

    public Pair(KeyObject k, ValueObject v)
    {
        key = k;
        vale = v;
    }

    // ...
    
    @Override
    public String toString()
    {
         return "Key: " + key.getKey() + " - Value: " + value.getValue();
    }
}
于 2011-11-03T20:50:39.127 に答える
2

toString()カスタム クラスのメソッドをオーバーライドして、必要な情報を出力できます。

@Override 
public String toString() {

    return .....;
  }
于 2011-11-03T20:53:49.983 に答える
1

メソッドを拡張ArrayListしてオーバーライドできます。toString()

public class MyArrayList<T> extends ArrayList<T> {
    @Override
    public String toString() {
        // format your print here...
    }
}

しかし、これはやり過ぎです。印刷ユーティリティメソッドを書くだけです。

public class MyUtils {
    public String toString( ArrayList<? extends Object> ) {
        // format your print here;
    }
}
于 2011-11-03T20:56:02.353 に答える
1

toString()メソッドを定義する必要があります。によって自動的に呼び出されますSystem.out.println(Object o)。このクラスには、適切にフォーマットされた表現を提供するArrayListオーバーライドされたメソッドがあります。toString()

基本的に、独自の定義でObject.toStringをオーバーライドするだけで十分です。

于 2011-11-03T20:52:31.833 に答える