如何在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时,我仍然得到默认表示。 我错过了什么吗?

你应该做点什么

 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 list = new ArrayList() { private static final long serialVersionUID = 1L; @Override public String toString() { return super.toString(); } }; 

您不能覆盖ArrayList 1toString方法。 相反,您可以使用实用程序类,以您希望/需要的方式将ArrayList转换为String 。 另一种方法是使用Arrays.deepToString(yourList.toArray())

使用Java 8,这可以非常轻松地完成:

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

或者如果你有一个List

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

我仍然反对扩展ArrayList或类似的,在技术上是可行的,但我不认为它是一个不错的选择。


1你可以扩展ArrayList并覆盖toString但通常这不是一个好主意。 更多信息:

  • 扩展java ArrayList
  • 你能用Java扩展ArrayList吗?
  • 扩展ArrayList,或者不扩展ArrayList

你需要编写一个从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; } } 

要覆盖ArrayList整数数组的toString():

 class MyArrayList extends ArrayList { 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 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。

您还可以创建一个基于HAS关系的ArrayList。 在这种情况下,您必须编写另一个方法来返回String而不是覆盖toString方法。