2016-06-12 20 views
0

所以我做了一個通用列表,它只接受字符串,如果我將它們轉換爲(T)。這裏是我的代碼:如何將數字放入通用列表中?

package dz06; 

import java.util.ArrayList; 
import java.util.List; 

    public class Exersise04<T> { 

     public static void main(String[] args) { 

      new Exersise04(); 

     } 

     public Exersise04(){ 

      List<T> list = new ArrayList<>(); 

      list.add((T)"Hello"); 
      list.add((T)25); 

     } 

    } 

這給了我一個錯誤,當我想要添加的INT 25即使我投它作爲(T)。如果它是一個通用列表,它不應該採取我給它的任何東西嗎?請幫幫忙,謝謝提前

回答

1

你不能施放原始INT到(T),試着投一個整數(T)

list.add((T)((Integer)25)); 

(你可以施放原始INT整數((Integer)25)因爲automatic boxing。)

+0

哦,是的,謝謝你我忘了所有關於拳擊和拆箱 – Oktavix

0

我認爲你誤解了你的列表中的'通用'部分。你正在考慮它是一個清單對象,事實並非如此。它是'T'對象的列表,其中T是Exercise04類的通用參數。

我想存儲'stuff'列表,比如字符串和整數,你需要使用List<Object>

爲了把整數列表中,你可以這樣做:

List<Integer> iList = new ArrayList<>(); 
list.add(100); 

其作品,因爲拳擊的。然而,你不能然後把字符串。

否則,'T'你的情況將由某人實例化您的Exercise04類定義。

0

你錯誤的原因是因爲你是在一個糟糕的方式泛型類實現...

如果你是在一個良好的IDE編碼,在你至少應該得到一個警告,像

Exersise04是一種原始類型。引用泛型類型Exersise04 應該是參數

這是因爲,你定義的類通用的,但你要實現它想:

public static void main(String[] args) { 
    new Exersise04(); 
} 

這意味着,Exersise04不知道是什麼在宣佈時正在舉行......(不好,不好的做法)

嘗試這樣做,而不是

public class Exersise04<T> { 

    public static void main(String[] args) { 
    new Exersise04<String>(); 
    } 

    public Exersise04() { 
    List<T> list = new ArrayList<>(); 
    list.add((T) "Hello"); 
    list.add((T) 25); 
    } 
} 

,然後你會看到你的編譯器會抱怨這裏 list.add((T) 25);因爲現在大家都確信,這個類僅持有允許String對象

無法從投INT至T

0

你就必須申報對象列表(所有對象的母親)

List<Object> list = new ArrayList<Object>(); 
list.add((T)"Hello"); 
list.add((T)25); 
相關問題