Java 让我恼火的一件事是泛型类型参数的编译时翻译的糟糕实现。
我可以观察并理解 C# 实现要好得多,但我对它的工作原理感到困惑。
本质上,你怎么能说:
T t = new T()
如果您不知道 T 的类型,因此不知道构造函数参数要求?
我可以看到
Class<T> cl = T.class
或者
T[] tarr = new T[0]
但是如果您不知道构建它的要求,我看不出如何真正创建 T 的新实例?
你只能做new T();
如果 T 被限制为有一个普通的、无参数的公共(public)构造函数,例如:
public class Foo<T> where T : new() {
private myT = new T();
}
此外,无法指定是否存在任何其他类型的构造函数。这不可能:
// Doesn't work
public class Foo<T> where T : new(String, Int) {
private myT = new T("Foo", 5);
}
对于您的其他观点,这是您在运行时获取 T 类型的方式:
var tType = typeof(T);
并创建
T
的数组实际上并不创建任何实例(除非
T
是值类型,在这种情况下它会创建该类型的默认值):
// Space for 32 T's, but nothing in the array.
// If T is a value type, like an int for instance,
// each one would have the default value (0 for int, for example)
var arrayOfT = new T[32];
我是一名优秀的程序员,十分优秀!