Я следую хорошо известному учебнику IBM по синтаксическому анализу RSS-канала. Я проверил это, и я получаю список только первого пункта. В AndroidSaxFeedParser
мы видим, что currentMessage является окончательным, что означает, что его нельзя изменить, и когда я написал свою собственную реализацию, я удалил вызов copy()
из currentMessage
, потому что компилятор не находит этот метод (отсюда реплицированный набор данных на мой взгляд).
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;
}
}
Итак, мой вопрос: что за copy()
, я что-то упускаю здесь?
Редактировать
По сути, я хочу знать следующее:
- Что такое
copy()
? и почему это работает со всеми, но не со мной? (все люди, упоминающие учебник, никогда ничего об этом не говорили ..)
Кроме того, причина, по которой я делаю это окончательно, в том, что компилятор просит меня сделать это. Если я удалю ключевое слово final
, я получу следующее сообщение об ошибке:
Невозможно обратиться к неконечной переменной
currentMessage внутри внутреннего класса
защищать другим методом.
Спасибо!