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を呼び出すと、デフォルトの表現が得られます。私は何かが足りないのですか?
あなたは次のようなことをする必要があります
_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
を自分で実装しますが、ここでは不要のようです。
ArrayList<String> list = new ArrayList<String>()
{
private static final long serialVersionUID = 1L;
@Override public String toString()
{
return super.toString();
}
};
toString
のArrayList
メソッドをオーバーライドすることはできません1。代わりに、ArrayList
をString
に必要な方法で変換するユーティリティクラスを使用できます。別の方法は、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
をオーバーライドすることもできますが、一般的にはそれは良い考えではありません。詳細情報:
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;
}
}
新しく作成されたクラスでtoStringメソッドをオーバーライドできますが、作成されたクラスがArrayListを拡張していることを確認する必要があります。次に、toStringメソッドをオーバーライドできます。これはISの関係に基づいています。新しく作成されたクラスは、ArrayListの一種です。
HAS関係に基づくArrayListを作成することもできます。この場合、toStringメソッドをオーバーライドする代わりに、Stringを返す別のメソッドを作成する必要があります。
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]