【问题标题】:How to override toString and print out custom class type of ArrayList如何覆盖 toString 并打印出自定义类类型的 ArrayList
【发布时间】:2016-05-31 17:33:55
【问题描述】:

我能找到的最接近的是这个线程: How to print the value of arraylist contents in my logcat?

但是,当我尝试覆盖输出时,它给了我错误:数组类型中的 toString(long[]) 方法不适用于参数 (List)

// 更新: 事实证明,我不需要 System.out.println 中的 Arrays.toString。所以让我把我的问题改成:为什么我仍然需要在 Interval 类中使用这个 Override?我注意到没有它,我会得到这样的输出:

[Interval@6d06d69c, Interval@7852e922, Interval@4e25154f, Interval@70dea4e]

这是我的代码:

 public static void main (String [] args) {
     List<Interval> intervals = new ArrayList<Interval>();
     intervals.add(new Interval(1,3));
     intervals.add(new Interval(2,6));
     intervals.add(new Interval(8,10));
     intervals.add(new Interval(15,18));
     System.out.println(Arrays.toString(intervals));
 }

这是我的间隔课:

public class Interval {
    int start;
    int end;
    Interval() {start = 0; end = 0;}
    Interval(int s, int e) {
    start = s;
    end = e;
    }
    @Override
    public String toString() {
        return "[ " + start + ", " + end + "] ";
    }
}

【问题讨论】:

  • 为什么要将列表转换为数组?直接打印列表就行了
  • 像这样打印它:System.out.println(intervals);你会得到你所期望的结果。
  • 请不要编辑您的问题以在原始问题得到回答后提出新问题。如果您还有其他问题,请创建一个新帖子并提出问题。

标签: java arraylist overriding tostring println


【解决方案1】:

问题在于 Arrays.toString(...) 需要一个数组作为输入,而不是一个列表。

【讨论】:

  • 好吧,我有点迷路了。虽然我做这个 Override toString 事情的原因是我需要在 System.out.println 中使用它。所以,让我把我的问题改成:为什么没有那个 Override,当我执行 System.out.println 时,它给了我 [Interval@6d06d69c, Interval@7852e922, Interval@4e25154f, Interval@70dea4e]
  • @Patrick System.out.println() 在传入的对象上隐式调用toString()
猜你喜欢
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
相关资源
最近更新 更多