泛型函数中的对象的Java分配解决方法?

Java allocation of objects within generic functions workaround?

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
public < T > T wishful_thinking(  )
{
    return new T( );
}

由于"对象切片"(即编译,但"segfaults"),强制转换也不起作用:

1
2
3
4
public < T > T wishful_thinking(  )
{
    return ( T )new Object( );
}

那么……是否有任何解决方法(也许是使用反射或类似的方法)?

谢谢!


不能。解决方案是在方法中传递Class对象,并使用反射创建实例。

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

1
2
3
4
public <T> T wishful_thinking(Class<T> clazz)
{
    return clazz.newInstance();
}


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

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

1
2
3
4
public <T> T wishful_thinking( Class<T> classToInstanciate ) throws ...
{
   return classToInstanciate.newInstance();
}