List<Object> frames = new ArrayList();
List<String> names = new ArrayList();
frames.add(names);
//compiler error
frames.get(0).add("ABCD");
由于.get()
返回对象类型而对象类型没有.add()
方法,因此编译器会引发错误。如何将对象类型转换为List类型?
答案 0 :(得分:2)
您可以将frames
变量的泛型从Object
更改为List<String>
。这样编译器就可以看到列表中的类型,这允许您使用get(...)
方法。
List<List<String>> frames = new ArrayList<List<String>>();
List<String> names = new ArrayList<String>();
frames.add(names);
frames.get(0).add("ABCD");
答案 1 :(得分:2)
您有两个选择:
如果列表frames
始终包含字符串列表,请将List<List<String>>
更改为frames
。这是安全的,但仅限于一种类型。
List<List<String>> frames = new ArrayList<List<String>>();
获取时使用类型转换。这个不安全,我建议你尽可能避免施法。这里将检查从frames
列表中获取的项目是否真的是List本身:
Object first = frames.get(0);
if (first instanceof List) {
((List<String>) first).add("ABCD");
}
此外,尽量避免使用原始类型。在这种情况下,请在声明中使用菱形<>
运算符:
List<Object> frames = new ArrayList<>();
List<String> names = new ArrayList<>();