Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';这个删除呼叫有什么问题吗_Java - Fatal编程技术网

Java 什么';这个删除呼叫有什么问题吗

Java 什么';这个删除呼叫有什么问题吗,java,Java,附件是一个示例代码,我正在尝试清除列表中的旧内容,然后再填充新数据,但它似乎不起作用。 比方说,如果在第一次通话中,我得到的列表大小为4,在第二次通话中,列表大小为6,那么它会使列表的大小增加到10。我想要的只是最近一次通话的数据 public class DemoClass { List<String> myList = new ArrayList<>(); public void doSomething() { myList

附件是一个示例代码,我正在尝试清除列表中的旧内容,然后再填充新数据,但它似乎不起作用。 比方说,如果在第一次通话中,我得到的列表大小为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;
     }
}
公共类DemoClass
{
List myList=new ArrayList();
公共无效剂量测定法()
{
myList=getMyList(“参数”);
System.out.println(myList.toString());
//大小为3的阵列列表中的结果=AAA、BBB、CCC
}
公共无效不做任何事
{
myList=getMyList(“不同的参数”);//返回的实际大小为4
System.out.println(myList.toString());
//大小为7的阵列列表中的结果=AAA、AAA、BBB、BBB、CCC、DDD、EEE
}
公共列表getMyList(字符串参数)
{
//一些基于params的业务逻辑
myList.clear();
myList=//填充列表的代码
返回myList;
}
}
getMyList()在其上看起来很好,但正如其他人所提到的,myList是全局的。myList.clear()确实是清除列表的正确方法。尝试在getMyList()中创建一个新列表,看看问题是否仍然存在;在您当前的体系结构中,您必须绝对确保这个类中处理myList的所有内容都在同一个线程上被调用


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

我们需要一些关于您如何使用这些方法的信息?你从哪里调用它们?如果你用return传递它,为什么
myList
是一个全局变量?它是某种缓存吗?为什么要清除它,而不是仅仅创建一个新的并完全删除myList字段?保持myList全局,因为它也被其他一些方法使用。@breakingBad方法不直接调用
getMyList
?在这些方法中添加一个额外的参数
myList
是不可行的?@lusicubal,它实际上是别人的代码,太多其他依赖项。没有办法清除此全局列表?谢谢Logan,将尝试创建新列表。我很快就回来。