附件是一个示例代码,我尝试清除列表中的旧内容,然后填充新数据,但它似乎不起作用。 假设在第一次通话中我得到了大小为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;
}
}
答案 0 :(得分:0)
getMyList()看起来很好,除了myList是全局的这个事实,正如其他人提到的那样。 myList.clear()确实是清除列表的正确方法。尝试在getMyList()中创建一个新列表,看看问题是否仍然存在;使用当前的体系结构,您必须绝对确定此类中处理myList的所有内容都在同一个线程上调用。
使用您现在拥有的代码,很难找出问题发生的位置 - 也许是在getMyList()的逻辑中?也许另一种方法会跳入并修改myList?不可能知道。如果getMyList()返回一个全新的列表,您可以稍后将其分配给myList(例如,在doAnotherThing()中),那么您至少可以在不同的点打印不同的列表以查看错误的位置。