Java中的copy()方法-这样的事情吗?
|
我遵循着名的IBM教程,该教程解析RSS feed。我测试了它,但只得到第一项的列表。在ѭ0中,我们可以看到currentMessage是最终的,这意味着它无法更改。当我编写自己的实现时,我从
currentMessage
中删除了copy()
调用,因为编译器找不到此方法(因此,我认为这组数据)。
public class AndroidSaxFeedParser extends BaseFeedParser {
public AndroidSaxFeedParser(String feedUrl) {
super(feedUrl);
}
public List<Message> parse() {
final Message currentMessage = new Message();
RootElement root = new RootElement(\"rss\");
final List<Message> messages = new ArrayList<Message>();
Element channel = root.getChild(\"channel\");
Element item = channel.getChild(ITEM);
item.setEndElementListener(new EndElementListener(){
public void end() {
// Here, what\'s copy()?!!
messages.add(currentMessage.copy());
}
});
item.getChild(TITLE).setEndTextElementListener(new EndTextElementListener(){
public void end(String body) {
currentMessage.setTitle(body);
}
});
item.getChild(LINK).setEndTextElementListener(new EndTextElementListener(){
public void end(String body) {
currentMessage.setLink(body);
}
});
item.getChild(DESCRIPTION).setEndTextElementListener(new
EndTextElementListener(){
public void end(String body) {
currentMessage.setDescription(body);
}
});
item.getChild(PUB_DATE).setEndTextElementListener(new EndTextElementListener(){
public void end(String body) {
currentMessage.setDate(body);
}
});
try {
Xml.parse(this.getInputStream(), Xml.Encoding.UTF_8,
root.getContentHandler());
} catch (Exception e) {
throw new RuntimeException(e);
}
return messages;
}
}
所以我的问题是,ѭ1是多少,我在这里缺少重要的东西吗?
编辑
基本上,我想知道的是:
ѭ1是什么?为什么它似乎适用于所有人,但不适用于我? (所有提到本教程的人都从没说过任何话。
另外,之所以将其定型是因为编译器要我这样做。如果删除final
关键字,则会收到以下错误消息:
无法引用非最终变量
内部类中的currentMessage
用另一种方法来捍卫。
谢谢!
没有找到相关结果
已邀请:
2 个回复
容淑阔九
,ѭ9列表最终将包含一遍又一遍相同的消息实例。 因此
方法的行为应类似于
,实际上清单中缺少该方法。
佩疵瓦
您稍后将在代码中自行为其分配值,而编译器不会抱怨:
我的问题是,为什么您首先需要一条消息是不变的。仅当您有并发线程访问(和操作)数据时,不变性才是问题。在Feed解析器中不应发生这种情况,没有理由更改传入的消息。