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的方法。相反,您可以使用将 a 转换为您想要/需要的方式的实用程序类。另一种选择是使用.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 整数数组的 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 回答
0

您可以在新创建的类中覆盖 toString 方法,但应确保创建的类扩展 ArrayList。然后,您可以覆盖 toString 方法。这是基于 IS 关系的。新创建的类是一种 ArrayList。

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

于 2017-05-13T06:40:10.687 回答