我的 Util 类中有一个方法曾经可以工作,但由于某种原因它无法工作。我是类访问的所有变量都是静态的并且位于同一个类中,但是打印出来是错误的。如果问题简单的话我的问题就可以简单地回答
public static List<Integer> superMaleList = new ArrayList<>();
int REDO_LISTS = 2;
public static void runRefresh(int runcode)
{
if (runcode == REDO_LISTS)
{
Log.i("RUN REFRESH", " " + superMaleList.size()); //Prints out correct size
refresh(runcode, superMaleList);
}
}
public static void refresh(int runcode, List maleList)
{
Log.i("RUN REFRESH", ""+ maleList.size()); //prints incorrectly
}
这些方法在另一个类中静态访问。我可以添加到列表中并从其他类中的列表中读取,但是当我将列表变量传递给这些方法时,它们无法正确打印。为什么?
更新
我使用这些方法的方式如下(这是在线程中静态执行的)
EventUtils.superMaleList.add(2);
EventUtils.runRefresh(2);
最佳答案
可能性:
在多线程环境中,您可能会在另一个线程上从
superMaleList
中删除元素、在列表上调用clear()
或重新初始化superMaleList 到一个新的列表对象。您可以通过将 superMaleList 设置为final
变量来防止最后一个条件(重新初始化)。多个 class loaders可能会产生多个 superMaleList。尝试将您的应用程序配置为使用单个类加载器,看看这是否会产生影响。
关于java - 方法执行不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27775669/