2014-10-08 65 views
-1

編輯:這是一個Eclipse問題(?)。 Eclipse顯示一個錯誤但編譯它,似乎與Java 8和Type Casting有關。從外部訪問列表,缺少泛型類型

我已經有一個List<E>場的一類。如果我在課堂上訪問它,我會得到List<E>
但如果我從外部訪問的列表,我只得到List沒有泛型類型。如果我訪問它的元素,我只得到一個Object,而不是E 的,但在我的代碼,我需要明確的E,所以我怎樣才能改變/修復,以便List不除去仿製藥,並沒有明確的鑄造返回?

用類列表:

public class ListClass { 

    private List<String> list; 

    public ListClass(){ 

     list = new ArrayList<>(); 

    } 

    public List<String> getList(){ 
     return list; 
    } 
} 

方含類:

public class ContainingClass { 

    private ListClass lc; 

    public ContainingClass(){ 

     lc = new ListClass(); 
    } 

    public ListClass getListClass(){ 
     return lc; 
    } 

} 

現在的問題:

ContainingClass cc = new ContainingClass(); 

    String str = cc.getListClass().getList().get(0); 
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
       Error: "Type mismatch: cannot convert from Object to String" 

但是,爲什麼?

+1

聽起來就像是吸你的字段是使用原始類型。 – Keppil 2014-10-08 21:07:30

+0

@Keppil在問題中看到我的'#getHashMap()',它使用的是原始類型嗎? – criztovyl 2014-10-08 21:14:16

+0

不,應該有效。你還可以分享你的通話代碼嗎? – Keppil 2014-10-08 21:16:19

回答

0

這個答案是指Revision 3

我認爲問題是,類應該有模板參數,而不是方法。

public class X<K, V> { 
    private HashMap<K, V> hashMap; 

    public X(){ 
     hashMap = new HashMap<>(); 
    } 

    public HashMap<K,V> getHashMap(){ 
     return hashMap; 
    } 
} 
+0

同樣的問題作爲木裏Yulzary的回答,'K'和'V'其中固定類型,忘了把它寫下來。 – criztovyl 2014-10-10 13:54:51

0

這是什麼導致了問題:當你實例X你留下任何參數

public class X { 
    private HashMap<K, V> hashMap; 

    public X(){ 
     hashMap = new HashMap<>(); 
    } 

    public HashMap<K,V> getHashMap(){ 
     return hashMap; 
    } 
} 

,因此它是一種原始類型。

你的解決方法是告訴X型的鍵和值在實例要使用的:

public class X<K, V> { 
    private HashMap<K, V> hashMap; 
    public X(){ 
    hashMap = new HashMap<>(); 
    } 

    public HashMap<K,V> getHashMap(){ 
    return hashMap; 
    } 
+0

就我而言,'K'和'V'是固定類型,沒有變量類型。忘了寫下來。 – criztovyl 2014-10-10 13:53:17

+0

只需將內容投射到您想要的課程。 – 2014-10-10 20:58:07

+0

好的,那就是我現在正在做的事情,但是我想如果沒有明確的轉換就可能。 – criztovyl 2014-10-12 15:56:50