方法无法正确执行

时间:2015-01-05 08:19:53

标签: java

我的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);

2 个答案:

答案 0 :(得分:1)

的可能性:

  1. 在多线程环境中,您可能正在从另一个线程上的superMaleList中删除元素,在列表上调用clear(),或者将superMaleList重新初始化为新的列表对象。您可以通过将superMaleList设为final变量来阻止最后一个条件(重新初始化)。

  2. 多个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,并通过一些静态和同步的方法添加元素。