[英]How can I override the toString method of an ArrayList in Java?
我想在 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()
,我仍然得到默认表示。 我错过了什么吗?
ArrayList<String> list = new ArrayList<String>()
{
private static final long serialVersionUID = 1L;
@Override public String toString()
{
return super.toString();
}
};
您不能覆盖ArrayList
1的toString
方法。 相反,您可以使用实用程序类以您想要/需要的方式将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
或类似的东西,在技术上是可行的,但我认为它不是一个好的选择。
1您可以扩展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;
}
}
你应该做类似的事情
public static String listToString(List<?> list) {
String result = "+";
for (int i = 0; i < list.size(); i++) {
result += " " + list.get(i);
}
return result;
}
并将列表作为listToString()
的参数listToString()
。 您可以在技术上扩展ArrayList
(使用匿名类或具体类)并自己实现toString
,但这在这里似乎没有必要。
要覆盖 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]
您可以在新创建的类中覆盖 toString 方法,但应确保创建的类扩展了 ArrayList。 然后,您可以覆盖 toString 方法。 这是基于IS关系。 新创建的类是一种 ArrayList。
您还可以创建一个 ArrayList,它基于 HAS 关系。 在这种情况下,您必须编写另一个方法来返回 String 而不是覆盖 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时,我仍然得到默认表示。 我想念什么吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.