【发布时间】:2013-08-29 20:11:43
【问题描述】:
我有一个返回类型的泛型方法。我知道它几乎没有任何实际用途,具有原始数据类型的泛型,但我正在试验。我无法理解,当 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
}
}
【问题讨论】:
-
你会如何关联
E和int? -
@Rohit 就像我将 List
类型的列表投射到 List 一样,我可以投射它吗? -
Downvoters,这是一个新手提出的真正问题。谢谢 :)
-
如果你注意到,编译器会在列表中给你一个未经检查的强制转换警告。这是因为由于类型擦除,
List<E>和List<Demo>在运行时都是List。