web-dev-qa-db-ja.com

JavaでArrayListのtoStringメソッドをオーバーライドするにはどうすればよいですか?

JavaのArrayList用のtoString()メソッドを独自に実装したいと思います。ただし、このようなtoString()をArrayListを含むクラスに追加しても、機能しません。

_@Override
public String toString() {
    String result = "+";
    for (int i = 0; i < list.size(); i++) {
        result += " " + list.get(i);
    }
    return result;
}
_

このlist.toString()のようにArrayListを呼び出すと、デフォルトの表現が得られます。私は何かが足りないのですか?

10
user2426316

あなたは次のようなことをする必要があります

_public static String listToString(List<?> list) {
    String result = "+";
    for (int i = 0; i < list.size(); i++) {
        result += " " + list.get(i);
    }
    return result;
}
_

リストをlistToString()の引数として渡します。 can技術的にArrayListを拡張し(匿名クラスまたは具象クラスのいずれかで)、toStringを自分で実装しますが、ここでは不要のようです。

6
arshajii
ArrayList<String> list = new ArrayList<String>()
{
    private static final long serialVersionUID = 1L;

    @Override public String toString()
    {
        return super.toString();
    }
};
10
sashok724

toStringArrayListメソッドをオーバーライドすることはできません1。代わりに、ArrayListStringに必要な方法で変換するユーティリティクラスを使用できます。別の方法は、Arrays.deepToString(yourList.toArray())を使用することです。

Java 8を使用すると、これは非常に簡単に実行できます。

//List<String> list
System.out.println(String.join(",", list));

または、List<Whatever>がある場合:

System.out.println(
    list.stream()
        .map(Whatever::getFieldX())
        .collect(Collectors.joining(", "))
);

私はまだArrayListなどを拡張することに反対しており、技術的には可能ですが、それは良い選択肢ではないと思います。


1ArrayListを拡張してtoStringをオーバーライドすることもできますが、一般的にはそれは良い考えではありません。詳細情報:

9
Luiggi Mendoza

ArrayListから拡張するクラスを作成する必要があります。

import Java.util.ArrayList;

public class MyArrayList extends ArrayList {
    private static final long serialVersionUID = 1L;

    @Override
    public String toString() {
        String result = "+";
        for (int i = 0; i < this.size(); i++) {
            result += " " + this.get(i);
        }
        return result;
    }
}
6
Dennis Kriechel

新しく作成されたクラスでtoStringメソッドをオーバーライドできますが、作成されたクラスがArrayListを拡張していることを確認する必要があります。次に、toStringメソッドをオーバーライドできます。これはISの関係に基づいています。新しく作成されたクラスは、ArrayListの一種です。

HAS関係に基づくArrayListを作成することもできます。この場合、toStringメソッドをオーバーライドする代わりに、Stringを返す別のメソッドを作成する必要があります。

0
Xiaogang

ArrayList整数配列のtoString()をオーバーライドするには:

class MyArrayList extends ArrayList<Integer> {
    private static final long serialVersionUID = 1L;
    @Override public String toString(  ) {
        String output = "";
        for ( int i = 0 ; i < this.size(); i++ )
            output = Integer.toString( this.get( i ) );
        return output;
        }
    }

ArrayList<Integer> list = 
    new ArrayList<>(Arrays.asList( 5, 4, 2, 9, 1, 7 ) );
System.out.print( "list = " + list );

生成されます:list = [5、4、2、9、1、7]

0
Tom Ritch