我正在学习Java的通用,我陷入了一些实例化从泛型参数接收的类型的问题(这在C#中是可能的)
class Person {
public static <T> T say() {
return new T; // this has error
}
}
Run Code Online (Sandbox Code Playgroud)
我试过这个:Java中的泛型 - 实例化T
public static <T> T say(Class<?> t) {
return t.newInstance();
}
Run Code Online (Sandbox Code Playgroud)
错误:
incompatible types
found : capture#426 of ?
required: T
Run Code Online (Sandbox Code Playgroud)
这不起作用.以下看起来没问题,但它需要实例化一些类,不能用于静态方法:在java中实例化泛型类型
public class Abc<T>
{
public T getInstanceOfT(Class<T> aClass)
{
return aClass.newInstance();
}
}
Run Code Online (Sandbox Code Playgroud)
这是Java人们说的类型擦除吗?这是类型擦除的限制吗?
这个问题的解决方法是什么?
你非常接近.你需要替换Class<?>(意思是"任何类型的类")Class<T>(意思是"类T"):
public static <T> T say(Class<T> t) throws IllegalAccessException, InstantiationException {
return t.newInstance();
}
Run Code Online (Sandbox Code Playgroud)