0

附件是一个示例代码,我试图在用新数据填充列表之前清除列表的旧内容,但它似乎不起作用。假设在第一次调用中我得到了大小为 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;
     }
}
4

1 回答 1

0

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

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

于 2013-08-18T22:40:09.117 回答