【问题标题】:Java code explanation required, method void return type and calling method variable需要Java代码解释,方法void返回类型和调用方法变量
【发布时间】: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&lt;String&gt; list) { list.add("foo"); }

标签: java android return


【解决方案1】:

你要知道,在java中,对象是通过引用传递给方法的。这意味着parseItems 正在更改其本地引用指向的实际对象。

其实真正的故事更有趣:你实际上作为参数传递给方法的是值引用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多