我创建一个这样的功能
public <T extends ClientCoporate> void myFunction(List<T> clients){
T client = new T(); // issue
....
}
IDE错误
Cannot instantiate the type T
一个简单的问题,如何在这里扩展
ClientCoporate
的任何类的新实例?我尝试搜索,但没有希望,如果您能找到任何重复的问题,请随时为我标记。谢谢。 最佳答案
您无法执行此操作的原因之一-尽管可能至少还有几个原因-是因为在您试图构造T的那一刻还不清楚T的具体类型。我们不能肯定地说T的具体类型具有无参数构造函数。我们唯一知道的是在ClientCoporate
中具有方法。
考虑以下类别:
class MyClientCoporate extends ClientCoporate // or implements, it doesn't matter
{
private MyClientCoporate() {}
}
我们不能在此类上使用
new T()
,因为构造函数不是公共的。这是编译器不允许这样做的原因之一。如果您可以更改方法的签名,则可以执行以下操作:
public <T extends ClientCoporate> void myFunction(List<T> clients, Supplier<T> constructor){
T client = constructor.get();
...
}
用法示例:
myFunction(aList, SomeClientCoporateClass::new);