Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 返回类型为<;的泛型方法;E>;_Java_Generics - Fatal编程技术网

Java 返回类型为<;的泛型方法;E>;

Java 返回类型为<;的泛型方法;E>;,java,generics,Java,Generics,我有一个返回类型为的泛型方法。我知道它几乎没有任何实际用途,具有原始数据类型的泛型,但我正在试验。我不明白,当一个原语数据类型被传递到方法3的参数中时,它正在工作,那么为什么在方法4的主体中强制转换不工作呢 如果它适用于方法3中的基本数据类型,那么为什么不在方法4中呢 class Demo { List<Demo> list = new ArrayList<Demo>(); int id; int b[]; public <E> L

我有一个返回类型为的泛型方法。我知道它几乎没有任何实际用途,具有原始数据类型的泛型,但我正在试验。我不明白,当一个
原语
数据类型被传递到
方法3的参数中时,它正在工作,那么为什么在
方法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
 }
}
类演示
{
列表=新的ArrayList();
int-id;
int b[];
public List showList()//方法1
{
return()list;//这工作正常
}
公共列表showList2(列表x)//方法2
{
return x;//这很好用
}
public E showNumber(ex)//方法3,称为new Demo().showNumber(2);
{
return x;//适用于每种基本数据类型
}
public E show()//方法4
{
return(E)id;//不工作
}
}

由于类型擦除,除非传入
E.Class
中的
E
Foo
、或
Class
,否则您永远不会知道E的类型。在这种情况下,该类型在运行时不可用

演员阵容也可能变得非法,但我们甚至不能走那么远

传入一个装箱整数将给出一个可重引用的参数,因此您知道类型必须是整数,因此将返回装箱整数


要么将
Demo
类泛化,使E可重新引用,要么确保传入了说明E是什么(可重新引用)的内容,例如
Foo
,一个
E.Class
填充了
E.Class
或者
E
本身的一个例子。

你如何将
E
int
联系起来?@Rohit就像我把一个类型列表列表放到一个列表中一样,我能把它放到一个列表中吗?向下投票者,这是一个新手真正的问题。谢谢:)如果你注意到,编译器将在列表中给您一个未经检查的强制转换警告。这是因为由于类型擦除,
List
List
在运行时都是
List