基本上我想做的是从泛型函数分配一个参数化类型:
public < T > T wishful_thinking( )
{
return new T( );
}
由于“对象切片”(也就是说,它可以编译,但是“段错误”),转换也不起作用:
public < T > T wishful_thinking( )
{
return ( T )new Object( );
}
那么...是否有任何解决方法(可能使用反射或类似的方法)?
谢谢!
基本上我想做的是从泛型函数分配一个参数化类型:
public < T > T wishful_thinking( )
{
return new T( );
}
由于“对象切片”(也就是说,它可以编译,但是“段错误”),转换也不起作用:
public < T > T wishful_thinking( )
{
return ( T )new Object( );
}
那么...是否有任何解决方法(可能使用反射或类似的方法)?
谢谢!
你不能。解决方案是在您的方法中传递一个Class
对象并使用反射来创建一个实例。
没有任何异常处理的示例:
public <T> T wishful_thinking(Class<T> clazz)
{
return clazz.newInstance();
}
泛型在 Java 中没有具体化。因此,你不能有类似的东西new T()
,因为 T 被删除了。
获取对象的唯一方法是使用Class
表示:
public <T> T wishful_thinking( Class<T> classToInstanciate ) throws ...
{
return classToInstanciate.newInstance();
}