2017-08-14 83 views
-11

在下面的代碼中,我在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; 
} 
} 
+4

請[編輯]你的問題,確保所有的代碼格式正確。此外,將錯誤**包含爲文本**,而不是鏈接的圖像,並在出現錯誤的代碼中標記該行。 – RealSkeptic

+0

您需要調用方法名稱,而不是變量名稱。 – khriskooper

+1

'.txt'不是'Object'的字段。名字不好的變量'set1'應該是'ArrayList >'的類型。切勿使用原始類型。 – bcsb1001

回答

-1

看SET1並把它比作SET2注意到,在第二種情況下,你指定確切集2將持有什麼樣的對象,但在設置1,你不這樣,編譯器,你使用你的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); 
} 
-1

因爲你是不是給人一種類型通用的第一設置1裏面,所以當你從SET1你不garunteed您找回名單是美國廣播公司的名單,這是混淆你的語法檢查。

考慮

ArrayList<ArrayList> set1 = new ArrayList<>(); 

比。

ArrayList<ArrayList<abc>> set1 = new ArrayList<>(); 
+0

不會。它肯定不會編譯好。它不是「混淆語法檢查器」,原始的get方法的返回值只是Object。一個'Object'沒有叫'txt'的字段。 – Moira

-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); 
相關問題