为啥我在编译时收到以下错误:[关闭]
Posted
技术标签:
【中文标题】为啥我在编译时收到以下错误:[关闭]【英文标题】:Why i am getting the following error in compilation: [closed]为什么我在编译时收到以下错误:[关闭] 【发布时间】:2018-01-22 08:24:13 【问题描述】:在下面的代码中,我在 Test_1 “System.out.println(set1.get(0).get(0).txt);”的最后第二行中遇到错误在“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;
【问题讨论】:
请edit您的问题确保所有代码格式正确。另外,将错误作为文本包含在链接图像中,并在代码中标记出现错误的行。 你需要调用方法名,而不是变量名。.txt
不是Object
的字段。命名不佳的变量set1
应该是ArrayList<ArrayList<abc>>
类型。永远不要使用原始类型。
您已经在下一行代码上解决了问题。您的非泛型 ArrayList
默认不是 abc
类型,但您可以将元素转换为该类型。
这里真正的重点是:这是基本的语法。不要尝试反复试验。阅读一本好书或教程,并遵循它——而不是“发明”你自己的语法。
【参考方案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】:因为您没有为第一个 set1 中的 Generic 提供类型,所以当您从 set1 获取时,您不会保证返回的列表是 abc 列表,这会使您的语法检查器感到困惑。
考虑
ArrayList<ArrayList> set1 = new ArrayList<>();
对比
ArrayList<ArrayList<abc>> set1 = new ArrayList<>();
【讨论】:
没有。它肯定不会编译得很好。它不是“混淆语法检查器”,原始get
方法的返回值只是Object
。 Object
没有名为 txt
的字段。以上是关于为啥我在编译时收到以下错误:[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在第二次运行测试时在 Mongoose 中收到错误“一旦编译后无法覆盖模型”?
Qt 创造者。为啥我在编译发布版本时收到有关 glut 的错误,但没有调试?
为啥类中的 stringstream 成员会导致编译时错误? [复制]
为啥我会收到错误“不安全代码可能仅在使用 /unsafe 编译时出现”?
为啥我在使用 ActionBar Sherlock 和旧版 android 版本时在 onCreate() 处收到错误? [关闭]