【问题标题】: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&lt;ArrayList&lt;abc&gt;&gt; 类型。永远不要使用原始类型。
  • 您已经在下一行代码上解决了问题。您的非泛型 ArrayList 默认不是 abc 类型,但您可以将元素转换为该类型。
  • 这里真正的重点是:这是基本的语法。不要尝试反复试验。阅读一本好书或教程,并遵循它——而不是“发明”你自己的语法。

标签: java arraylist


【解决方案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 方法的返回值只是ObjectObject 没有名为 txt 的字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多