在 C# 中,我可以对泛型参数施加类型约束,要求泛型类型具有默认的无参数构造函数。我可以在 Java 中做同样的事情吗?
在 C# 中:
public static T SomeMethodThatDoesSomeStuff<T>() where T : class, new()
{
// ... method body ...
}
class 和 new() 约束意味着 T 必须是一个可以用零参数的 new 运算符调用的类。我对 Java 泛型知之甚少,我可以使用 extends
来命名所需的父类(super class)。我可以使用它(或任何其他支持的操作)来实现上述功能吗?
最佳答案
没有;在 Java 中,典型的解决方案是传递一个类,doc 0-arg 构造函数的要求。这当然不是静态检查,但不是太大的问题
/** clazz must have a public default constructor */
public static <T> T f(Class<T> clazz)
return clazz.newInstance();
关于Java 泛型约束需要像 C# 这样的默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7563654/