我知道这是一个愚蠢的问题,但这确实困扰着我。
采取以下措施:
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语句都会输出预期的parseable
值parseable.parse(data)
。但是,返回的列表具有正确数量的元素,但是它们都等于循环完成之前可分析的最后一个值。这是因为list.add(xxx)参数是通过指针而不是通过值传递的?
最佳答案
您发布的代码中只有一个parseable
实例。当您调用add(parseable)
时,您正在为列表中的parseable
添加一个引用(在Java中“指针”并不是真正正确的)。
通过重复调用它,而无需更改对象parseable
所指的内容,您只需将对同一对象的更多引用添加到列表中。
新对象只能通过new
关键字创建。