我在阵列中有2个arraylists,如下所示:
public Object[] loopthrougharrays() {
Object[] tables = new Object[2];
tables[0] = list;
tables[1] = listB15;
return tables;
}
我的2个arraylists被称为list
和listB15
。
然后,我可以通过其他方法调用我的arraylists,如
loopthrougharrays()[1] = new ArrayList();
是listB15
。
但是,如果我尝试将项目添加到ArrayList
loopthrougharrays()[1].add(s)
其中s
是变量
Java无法将loopthrougharrays()[1]
识别为ArrayList
。
如何通过此方法添加变量?
我似乎收到以下错误:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
如果我执行以下操作,我的整个代码都可以正常工作:
listB15 = new ArrayList();
listB15.add(s)
正如我所料。
答案 0 :(得分:2)
问题是你正在对方法调用进行分配。 你正在调用这个方法两次。 所以第二行创建另一个数组列表
loopthrougharrays()[1] = new ArrayList();
loopthrougharrays()[1].add(s) //This one will call the method again
// and get new array list and the previous value is lost
简单修复
Object[] getTwoArrays = loopthrougharrays()
ArrayList L0 = <ArrayList> getTwoArrays[0];
ArrayList L1 = <ArrayList> getTwoArrays[1];
L1 = new ArrayList();
L1.add(s);
这里调用loopthrougharrays()一次,将返回值存储到本地引用中然后它就可以了
当我尝试提供快速修复时,我不会在对象数组中返回null arraylits,然后在方法外部进行初始化并执行赋值。它很笨拙。
一个较小的邪恶方式是
class SomeX {
private List Ll = new ArrayList();
private List L2 = new ArrayList();
public addToL1(Object s) {
L1.add(s);
}
public addToL2(Object s) {
L2.add(s)
}
}
//main method
SomeX x = new SomeX();
x.addToL1(s);
x.addToL2(s);
答案 1 :(得分:1)
我不知道你想用它做什么,但这不是一个好习惯。但是,如果将Object数组元素转换为ArrayList,它可能会起作用,如:
((ArrayList)t.loopthrougharrays()[1]).add(s);
删除loopthrougharrays()[1] = new ArrayList();
(如@Tom评论说,谢谢)或用
ArrayList myNewArrayList = (ArrayList)loopthrougharrays()[1];
myNewArrayList.add(s);
答案 2 :(得分:0)
在向列表中添加任何内容之前将其投射。
((ArrayList<YourVariableType>)(loopthrougharrays()[1])).add(s);
但请记住,这不是一个好习惯。我很确定,你可以通过更好的设计和最佳实践来实现你想要达到的目标。
答案 3 :(得分:0)
你的表是一个对象数组,
tables[1] = listB15;
//表格仍为array of object
,自Object is the Super class
以来,listB15被视为对象。
要实现你想要的,你可以试试这些方法:
((List<String>) tables[1]).add("hello world"); // cast it with List<String> (for example)
创建一个列表
List<List<String>> tables = new ArrayList<List<String>>();
tables1.add(list) ;
tables1.add(listB15) ;
tables1.get(1).add("hello world");
System.out.println(tables);