use*_*316 10 java overriding 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;
}
Run Code Online (Sandbox Code Playgroud)
当我像这样调用我的ArrayList时list.toString(),我仍然得到默认表示.我错过了什么吗?
sas*_*724 10
ArrayList<String> list = new ArrayList<String>()
{
private static final long serialVersionUID = 1L;
@Override public String toString()
{
return super.toString();
}
};
Run Code Online (Sandbox Code Playgroud)
你无法覆盖1的toString方法.相反,你可以使用一个转换工具类的,你想/需要的方式.另一种选择是使用.ArrayListArrayListStringArrays.deepToString(yourList.toArray())
使用Java 8,可以非常轻松地完成:
//List<String> list
System.out.println(String.join(",", list));
Run Code Online (Sandbox Code Playgroud)
或者,如果您有List<Whatever>:
System.out.println(
list.stream()
.map(Whatever::getFieldX())
.collect(Collectors.joining(", "))
);
Run Code Online (Sandbox Code Playgroud)
我仍然反对延伸ArrayList或类似,技术上可行,但我不认为这是一个不错的选择.
1你可以扩展ArrayList和覆盖toString但通常这不是一个好主意.更多信息:
你应该做点什么
public static String listToString(List<?> list) {
String result = "+";
for (int i = 0; i < list.size(); i++) {
result += " " + list.get(i);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
并将列表作为参数传递给listToString().你可以在技术上扩展ArrayList(使用匿名类或具体的类)并实现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;
}
}
Run Code Online (Sandbox Code Playgroud)