我想通过定义泛型类的类型来创建一个实例
public abstract class Base<T> {
private final T genericTypeObject;
protected Base(){
//Create instance of T here without any argument
}
}
Run Code Online (Sandbox Code Playgroud)
这样我就可以调用默认构造函数:
public class Child extends Base<SomeClass>{
public Child () {
super();
}
}
Run Code Online (Sandbox Code Playgroud)
基类实现将为我创建一个 GenericType 的实例。
通用信息将在编译时被删除,因此在运行时将T不再存在(您丢失了信息)。这就是为什么你在某个地方需要一个来存储信息。Class<>
我认为最干净和简单的解决方案是将类传递给构造函数。我知道你要求它没有任何构造函数参数,但我认为这是不可能的。
public abstract class AbstractBase<T> {
private final T genericTypeObject;
protected Base(Class<T> type){
try {
genericTypeObject = type.newInstance();
} catch (InstantiationException e) {
// Handle
} catch (IllegalAccessException e) {
// Handle
}
}
}
Run Code Online (Sandbox Code Playgroud)
public class Child extends Base<SomeClass> {
public Child () {
super(SomeClass.class);
}
}
Run Code Online (Sandbox Code Playgroud)
使用Supplier(感谢@Jorn Vernee 的评论):
public abstract class AbstractBase<T> {
private final T genericTypeObject;
public AbstractBase(Supplier<T> supplier) {
genericTypeObject = supplier.get();
}
}
Run Code Online (Sandbox Code Playgroud)
public class Child extends AbstractBase<SomeClass> {
public Child() {
super(SomeClass::new);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8178 次 |
| 最近记录: |