这个删除调用出了什么问题

时间:2013-08-18 22:09:04

标签: java

附件是一个示例代码,我尝试清除列表中的旧内容,然后填充新数据,但它似乎不起作用。 假设在第一次通话中我得到了大小为4的列表,并且第二次通话大小为6,那么它就会使列表大小增加到10个。我想要的只是来自最近通话的数据。

public class DemoClass
{
    List<String> myList = new ArrayList<>();


    public void doSomething()
    {

      myList =  getMyList("params");
      System.out.println(myList.toString());

      //Results in ArrayList of size 3 = AAA, BBB, CCC 

    }


    public void doAnotherThing()
    {

      myList = getMyList("different params"); // Actual size returned is 4

      System.out.println(myList.toString());
      //Results in ArrayList of size 7 = AAA, AAA, BBB, BBB, CCC, DDD, EEE 

    }

     public List<String> getMyList(String params)
     {
         //Some business Logic based on params

         myList.clear();
         myList = //code to populate the list

         return myList;
     }
}

1 个答案:

答案 0 :(得分:0)

getMyList()看起来很好,除了myList是全局的这个事实,正如其他人提到的那样。 myList.clear()确实是清除列表的正确方法。尝试在getMyList()中创建一个新列表,看看问题是否仍然存在;使用当前的体系结构,您必须绝对确定此类中处理myList的所有内容都在同一个线程上调用。

使用您现在拥有的代码,很难找出问题发生的位置 - 也许是在getMyList()的逻辑中?也许另一种方法会跳入并修改myList?不可能知道。如果getMyList()返回一个全新的列表,您可以稍后将其分配给myList(例如,在doAnotherThing()中),那么您至少可以在不同的点打印不同的列表以查看错误的位置。