0

我的教授让我们为她的实验室修改她的代码。特别是对于这个实验室,我的教授有一个我不应该触及的 println() 声明:

ArrayCollection ac = new ArrayCollection(ARRAY_SIZE);

所以上面的代码实例化了一个名为 ac 的对象。这一切都很好而且很花哨,但是我的教授在她的代码中也有这个我无法修改的语句:

System.out.println ("Collection contains:  " + ac);

因此,由于上面的行,我得到以下无用的输出:

集合包含:ArrayCollection{data=[Ljava.lang.Object;@24a20892, actualSize=3}

上面的输出可以告诉我关于对象 ac 的什么信息?输出是完全没用的,还是你认为这是我教授的本意。抱歉,我知道这是一个奇怪的问题,我会感谢任何人评论我的老师为什么留下这样的代码(她会因为非常小的错误而扣分>.<)。

编辑上午 9 点 48 分:

ArrayCollection ac 包含:{5,10,20} 用于我在上面发布的输出

4

6 回答 6

1

查看AbstractCollectionJDK 中类的 toString() 方法。

public String toString() {
        Iterator<E> it = iterator();
        if (! it.hasNext())
            return "[]";

        StringBuilder sb = new StringBuilder();
        sb.append('[');
        for (;;) {
            E e = it.next();
            sb.append(e == this ? "(this Collection)" : e);
            if (! it.hasNext())
                return sb.append(']').toString();
            sb.append(',').append(' ');
        }
    }

它可以满足您的期望。

如果你不想“复制”逻辑,例如继承ArrayCollectionAbstractCollection直接使用ArrayList

于 2012-09-27T13:49:32.113 回答
1

@ 后面的十六进制数是对象的哈希码 - 如果是对象,则为它的引用。她可能会对自动化测试感兴趣。

于 2012-09-27T13:51:10.350 回答
0

这里发生的是你println输出的返回值ArrayCollection.toString(),这里给你的信息是(假设她的实现是可靠的)这个类ArrayCollection至少有两个字段:data类型Object[],和actualSize,可能是数字类型,它的值实例为 3。

ArrayCollection假设这是一个 Java 接口的实现,由一个包含实际元素Collection的数组 () 支持,这似乎是合理的。data

于 2012-09-27T13:53:18.510 回答
0

显然,您的教授希望打印收藏的内容,而不是收藏的参考。

这是你可以做到的:

  • 循环遍历集合的内容。

  • 在此循环中,调用toString()每个对象并将生成的字符串累积到StringBuilder中。

  • 打印此 StringBuilder。

于 2012-09-27T13:46:26.770 回答
0

该表达式"Collection contains: " + ac正在调用对象上的toString()方法ac以获取对象的字符串表示形式ac。每当您使用+将字符串与对象连接时,首先通过调用对象的toString()方法将对象转换为字符串。

我认为您的老师希望您修改ArrayCollection课程,以便toString()生成格式良好的字符串表示形式。

于 2012-09-27T15:02:24.990 回答
0

它不是没用的,它为您提供以下数据:

ArrayCollection{data=[Ljava.lang.Object;@24a20892, actualSize=3}

你能查一下每个参数吗...?

她正在扩展CollectionCollections类。

编辑:是的,看看AbstractCollection

于 2012-09-27T13:46:43.740 回答