在下面的代码中,我在Test_1的第二行和#34; System.out.println(set1.get(0).get(0).txt);" in" txt"请帮忙。 java error screenshot
import java.util.ArrayList;
public class Test_1 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ArrayList<ArrayList> set1 = new ArrayList<>();
ArrayList<abc> set2 = new ArrayList<>();
ArrayList<abc> set3 = new ArrayList<>();
set1.add(set2);
set1.add(set3);
set2.add(new abc("xxxxxx"));
set2.add(new abc("xxxxx yyyyy"));
System.out.println(set2.get(0).txt);
System.out.println(set1.get(0).get(0).txt);
System.out.println(((abc) set1.get(0).get(0)).txt);
}
}
class abc{
String txt;
public abc(String txt)
{
this.txt = txt;
}
}
答案 0 :(得分:-1)
因为你没有在第一个set1中给出Generic的类型,所以当你从set1获得时,你不会想到你要回来的列表是一个abc列表,而且你的语法检查器很混乱。
考虑
if (urlDictionary.ContainsKey(url.Authority))
{
urlDictionary[url.Authority].Add(url);
}
else
{
urlDictionary.Add(url.Authority, new List<Uri> { url });
}
Vs以上。
ArrayList<ArrayList> set1 = new ArrayList<>();
答案 1 :(得分:-1)
查看set1并将其与set2进行比较注意,在第二种情况下,你准确指定set2将保持什么类型的对象,但是在set1中你不这样做,编译器不知道你使用你的abc类(由方式类名称应以大写字母开头)。这是解决方案
public static void main(String[] args) {
ArrayList<ArrayList<abc>> set1 = new ArrayList<>(); // notice this line
ArrayList<abc> set2 = new ArrayList<>();
ArrayList<abc> set3 = new ArrayList<>();
set1.add(set2);
set1.add(set3);
set2.add(new abc("xxxxxx"));
set2.add(new abc("xxxxx yyyyy"));
System.out.println(set2.get(0).txt);
System.out.println(set1.get(0).get(0).txt);
System.out.println(((abc) set1.get(0).get(0)).txt);
}
答案 2 :(得分:-1)
问题在于您set1
:
ArrayList<ArrayList> set1 = new ArrayList<>();
你说set1
是一个数组列表的数组列表......是什么?您没有指定set1的数组列表是什么类型的数组列表。在这种情况下,Java会假设您的意思是Object
。因此,set1
基本上是ArrayList<ArrayList<Object>>
。
现在您尝试set1.get(0).get(0)
。你会得到什么?一个Object
(由于多态性,实际上abc
,但编译器并不知道这一点)! Object
是否有一个名为text
的字段?编号错误!
现在您已了解错误发生的原因,您应该能够解决它。
ArrayList<ArrayList<abc>> set1 = new ArrayList<>();
现在你已经修好了,现在你不需要在下一行进行演员表了:
System.out.println(((abc) set1.get(0).get(0)).txt);
// ^^^^^
// don't need this
你可以这样写:
System.out.println(set1.get(0).get(0).txt);