12

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;
}

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

4

6 に答える 6

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

    @Override public String toString()
    {
        return super.toString();
    }
};
于 2013-08-08T15:06:30.563 に答える
9

1toStringのメソッドをオーバーライドすることはできません。代わりに、必要な方法でを に変換するユーティリティ クラスを使用できます。別の代替手段は、を使用することです。ArrayListArrayListStringArrays.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または類似に反対しています。技術的には可能ですが、良い選択肢とは思いません。


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

于 2013-08-08T15:06:29.737 に答える
9

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;
    }
}
于 2013-08-08T15:06:42.673 に答える
8

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

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

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

于 2013-08-08T15:06:30.243 に答える
0

ArrayList Integer 配列の 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]

于 2015-04-15T05:06:42.730 に答える