我创建一个这样的功能

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);

09-05 12:07