我的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
}
这些方法在另一个类中静态访问。我可以添加到列表中并从其他类的列表中读取,但是当我将list变量传递给这些方法时,它们无法正确打印。为什么呢?
更新
我使用这些方法的方式如下(这是在线程中静态执行的)
EventUtils.superMaleList.add(2);
EventUtils.runRefresh(2);
答案 0 :(得分:1)
的可能性:
在多线程环境中,您可能正在从另一个线程上的superMaleList
中删除元素,在列表上调用clear()
,或者将superMaleList重新初始化为新的列表对象。您可以通过将superMaleList设为final
变量来阻止最后一个条件(重新初始化)。
多个class loaders可能会导致多个superMaleList。尝试将应用程序配置为使用单个ClassLoader,以查看是否会产生影响。
答案 1 :(得分:1)
在我看来直接调用superMaleList很糟糕,我不知道你为什么要这样做。 GKNICKER已经完全说明了为什么你会收到错误。
EventUtils.superMaleList.add(2);
EventUtils.runRefresh(2);
假设有一些
的主题EventUtils.superMaleList.add(2);
EventUtils.runRefresh(1);
添加了另一个元素,但runRefresh将不执行任何操作
而不是上面的内容,你应该将superMaleList设为private,并通过一些静态和同步的方法添加元素。