2013-08-29 45 views
2

我有一個返回類型的泛型方法。我知道它幾乎沒有任何實際用途,它是具有原始數據類型的泛型,但我正在試驗。我無法理解,當一個primitive數據類型傳遞到它工作的method 3參數,那麼爲什麼鑄造並不體內工作的method 4返回類型的通用方法<E>

如果其工作的基本數據類型的方法3,那麼爲什麼不裏面的方法4 。

class Demo 
{ 
    List<Demo> list = new ArrayList<Demo>(); 
    int id; 
    int b[]; 

public <E> List<E> showList() //Method 1 
{ 
    return (<E>)list; //This works fine 
} 

public <E> List <E> showList2(List<E> x) //Method 2 
{ 
    return x;    // This works fine 
} 

public <E> E showNumber(E x) //Method 3,called as new Demo().showNumber(2); 
{ 
    return x; //works for every primitive data type 
} 

public <E> E show() //Method 4 
{ 
    return (E)id; // Not working 
} 
} 
+0

你會如何關聯'E'和'int'? –

+0

@Rohit就像我鑄造列表列表,我可以施放它嗎? – Sanjana

+1

Downvoters,它是一個來自新手的真正問題。謝謝:) – Sanjana

回答

2

由於類型擦除,你永遠不會知道E的類型,除非你要麼從E.class傳入得到EFoo<E>,或Class<E>,該類型是不可用在這種情況下運行。

演員陣容也可能會變成非法的,但我們甚至無法走到那一步。

傳入一個盒裝整數給出了一個可反駁的參數,所以你知道該類型必須是整數,然後返回盒裝整數。

無論是泛化的Demo類,所以E是refiable,或確保一些有關說明E是什麼(是refiable)傳入,如Foo<E>,一個Class<E>被填充E.classE本身就是一個例子。