在Java中通过引用传递列表

时间:2015-03-02 09:52:40

标签: java

我对Java有一个非常基本的疑问。

这是我写的代码。通过包A A类中的方法,我尝试实例化不同包的类b的对象并调用其方法,我通过了一个清单。

 parseObjectList = new ArrayList<ParseObject>();
 pullAllService.pullAllData(queryType,parseObjectList);

在函数中我做了一些操作:

 public void pullAllData(String queryType,List<ParseObject> parseObjectList)
{
    ParseQuery<ParseObject> query = null;

    List<ParseObject> parseObjects = parseObjectList;

    if(queryType.equals("a"))
    {
        query = new ParseQuery<ParseObject>("a");
    }
    else if(queryType.equals("b"))
    {
        query = new ParseQuery<ParseObject>("b");
    }



    try {
        parseObjects = query.find(); //I get the list

       /* final List<ParseObject> finalParseObjectList = parseObjectList;
        curActivity.runOnUiThread(new Runnable() {
            public void run() {
                ToastMessageHelper.displayLongToast(curActivity, "Objects found : ");
                for (int i = 0; i < finalParseObjectList.size(); i++) {
                    ToastMessageHelper.displayLongToast(curActivity, finalParseObjectList.get(i).get("Name").toString());
                    System.out.println();
                }
            }
        });
    */

    } catch (ParseException e) {
    e.printStackTrace();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }


}

之后如果我尝试在A类方法中打印列表。我得到一个空列表。

但如果我这样做,

 parseObjectList = new ArrayList<ParseObject>();
 parseObjectList = pullAllService.pullAllData(queryType,parseObjectList);

并使其从pullAllData()返回列表(通过更改返回类型并返回列表),我得到包含预期数据的列表。

我认为只需将parseObjectList传递给函数,传递的参数就会作为参考,并自动分配给目标数据。这里有什么问题?

1 个答案:

答案 0 :(得分:3)

Java是一种值传递语言。将List引用传递给方法允许该方法改变引用引用的List,但它不能更改传递给它的List引用的值。

您可以执行以下操作,将元素添加到传递给方法的列表中:

parseObjectList.addAll(query.find());