我知道这是一个愚蠢的问题,但这确实困扰着我。

采取以下措施:

public <TParseable> LinkedList<TParseable> readAllParseable(
            Parseable<TParseable> parseable, boolean close) throws IOException
{
   LinkedList<TParseable> list = new LinkedList<TParseable>();
    byte[] delim = parseable.getDelimiterValue();
    boolean skipNL = parseable.skipNewLines();

    while(ready())
    {
     byte[] data = readTo(delim);
     parseable.parse(data);

     System.out.println(parseable);

     list.add((TParseable)parseable);
    }
    return list;
}


每次调用toString()后,println语句都会输出预期的parseableparseable.parse(data)。但是,返回的列表具有正确数量的元素,但是它们都等于循环完成之前可分析的最后一个值。

这是因为list.add(xxx)参数是通过指针而不是通过值传递的?

最佳答案

您发布的代码中只有一个parseable实例。当您调用add(parseable)时,您正在为列表中的parseable添加一个引用(在Java中“指针”并不是真正正确的)。

通过重复调用它,而无需更改对象parseable所指的内容,您只需将对同一对象的更多引用添加到列表中。

新对象只能通过new关键字创建。

07-24 18:43