返回类型为<e> </e>的通用方法

时间:2013-08-29 11:27:43

标签: java generics

我有一个返回类型的泛型方法。我知道它几乎没有任何实际用途,具有原始数据类型的泛型,但我正在进行实验。我无法理解,当一个primitive数据类型被传递到method 3的参数时,它正在工作,那么为什么在method 4

的主体内部进行转换?

如果它在方法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
 }
}

1 个答案:

答案 0 :(得分:2)

由于类型删除,除非您从E传入Foo<E>Class<E>E.class,否则您永远不会知道E的类型。类型是在这种情况下,在运行时不可用。

演员也可能变得非法,但我们甚至无法做到那么远。

传入一个盒装的Integer会给出一个可反复的参数,所以你知道类型必须是Integer,因此返回了盒装的整数。

Demo类进行泛化,使E可以反复,或者确定传递E是(可反复)的内容,例如Foo<E>Class<E>是填充E.classE本身的示例。