我的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);
可能性:
在多线程环境中,您可能正在从superMaleList
另一个线程上删除元素,调用clear()
列表或将superMaleList初始化为新的列表对象。您可以通过将superMaleList设置为final
变量来防止最后一个条件(重新初始化)。
多个类加载器可能会导致多个superMaleList。尝试将您的应用程序配置为使用单个ClassLoader,以查看是否有区别。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句