0

基本上我想做的是从泛型函数分配一个参数化类型:

public < T > T wishful_thinking(  )
{
    return new T( );
}

由于“对象切片”(也就是说,它可以编译,但是“段错误”),转换也不起作用:

public < T > T wishful_thinking(  )
{
    return ( T )new Object( );
}

那么...是否有任何解决方法(可能使用反射或类似的方法)?

谢谢!

4

2 回答 2

5

你不能。解决方案是在您的方法中传递一个Class对象并使用反射来创建一个实例。

没有任何异常处理的示例:

public <T> T wishful_thinking(Class<T> clazz)
{
    return clazz.newInstance();
}
于 2013-06-19T20:27:07.540 回答
3

泛型在 Java 中没有具体化。因此,你不能有类似的东西new T(),因为 T 被删除了。

获取对象的唯一方法是使用Class表示:

public <T> T wishful_thinking( Class<T> classToInstanciate ) throws ...
{
   return classToInstanciate.newInstance();
}
于 2013-06-19T20:28:55.170 回答