【发布时间】:2016-05-25 09:35:58
【问题描述】:
我遇到了这段 Java 代码,我有点困惑。
下面是代码
public ArrayList<GalleryItem> fetchItems() {
ArrayList<GalleryItem> items = new ArrayList<GalleryItem>();
try {
....
parseItems(items, parser);
} catch (IOException ioe) {
Log.e(TAG, "Failed to fetch items", ioe);
} catch (XmlPullParserException xppe) {
Log.e(TAG, "Failed to parse items", xppe);
}
return items;
}
void parseItems(ArrayList<GalleryItem> items, XmlPullParser parser) throws XmlPullParserException, IOException {
int eventType = parser.next();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG &&
....
item.setId(id);
item.setCaption(caption);
item.setUrl(smallUrl);
items.add(item);
...
}
eventType = parser.next();
}
}
我需要知道的是:在上面的代码中,项目被传递给void parseitems(...) 方法。如您所见,parseitems 方法的返回类型为void。解析后,fetchItems 方法中的项目得到了值。这怎么可能?请解释一下
【问题讨论】:
-
充其量,你请求解释,你不要求它。另外,您是否看到有一个
items.add()?你认为这有什么作用? -
两种方法中的项目都是局部变量。
-
谷歌搜索“副作用”。
-
不,不是,除非您的摘录缺少一些重要信息。
items是parseItems()方法的第一个参数。 -
试着想象一下这个方法的作用:
void addFooToList(List<String> list) { list.add("foo"); }