假设我有一个参数化的Java类,其中包含一个私有的T _member.我想写一个默认的构造函数(没有参数),它以某种方式将我的T _member初始化为一些已知的类型T特定值(对于Integer为-1,对于Float为Float.MAX_VALUE ...).那可能吗?我尝试了新的T(),但编译器不喜欢这样.或者我什么都不做,保证为我调用默认构造函数?
由于类型擦除,在运行时"没有T".
绕过它的方法是将一个实例传递Class<T>给构造函数,如下所示:
public class MyClass<T> {
T _member;
public MyClass(Class<T> clazz) {
_member = clazz.newInstance(); // catch or throw exceptions etc
}
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这是一个非常常见的代码模式来解决"用T做事"的问题