基本上我要做的是从通用函数中分配参数化类型:
public < T > T wishful_thinking( )
{
return new T( );
}
由于“对象切片”(也就是说,它编译,但是“段错误”),也无法进行转换:
public < T > T wishful_thinking( )
{
return ( T )new Object( );
}
所以...有没有解决方法(可能使用反射或其他一些)?
谢谢!
答案 0 :(得分:5)
你做不到。解决方案是在方法中传递Class
对象并使用反射来创建实例。
没有任何异常处理的示例:
public <T> T wishful_thinking(Class<T> clazz)
{
return clazz.newInstance();
}
答案 1 :(得分:3)
泛型不是用Java来实现的。因此,你不能拥有像new T()
这样的东西,因为T被删除了。
获取对象的唯一方法是使用Class
表示:
public <T> T wishful_thinking( Class<T> classToInstanciate ) throws ...
{
return classToInstanciate.newInstance();
}