是否可以在 Java 中创建参数化 class 的实例?
Is it possible to create an instance of parameterized class in Java?
我的classes创作逻辑是一样的,但实际classes是不一样的。是否有可能以某种方式创建参数化实例 class?
这是一个例子:
public class MyClass <E extends MyEntityClass> {
public List<E> myList = new LinkedList<>();
public MyClass(JsonArray params) {
for(JsonElement param : params){
myList.add(new E(param));
}
}
}
MyEntityClass - 是具有接受 JsonElement 的构造函数的超级 class。
我知道 Java 不允许创建参数化的 class,但是否有可能以某种方式解决这个问题?
泛型在编译后被清除。
因此,当然,不可能像您尝试那样直接实例化参数化类型。
作为解决方法,您可以将工厂方法传递给构造函数。
使用功能接口,您可以在构造函数中添加参数 Function<JsonElement,E>
并使用它来创建通用元素的实例:
public class MyClass<E extends MyEntityClass> {
public List<E> myList = new LinkedList<>();
public MyClass(JsonArray params, Function<JsonElement, E> factoryE) {
for(JsonElement param : params){
myList.add(factoryE.apply(param));
}
}
}
您可以用这种方式实例化您的 class :
MyClass<MyEntityClass> myClass = new MyClass<MyEntityClass>(MyEntityClass::new);
使用接受 JsonElement
参数的构造函数定义的 MyEntityClass
:
public class MyEntityClass {
...
public MyEntityClass(JsonElement jsonElement){
...
}
...
}
当然,你可以在没有功能接口的情况下实现同样的事情,但会更冗长。
我的classes创作逻辑是一样的,但实际classes是不一样的。是否有可能以某种方式创建参数化实例 class?
这是一个例子:
public class MyClass <E extends MyEntityClass> {
public List<E> myList = new LinkedList<>();
public MyClass(JsonArray params) {
for(JsonElement param : params){
myList.add(new E(param));
}
}
}
MyEntityClass - 是具有接受 JsonElement 的构造函数的超级 class。
我知道 Java 不允许创建参数化的 class,但是否有可能以某种方式解决这个问题?
泛型在编译后被清除。
因此,当然,不可能像您尝试那样直接实例化参数化类型。
作为解决方法,您可以将工厂方法传递给构造函数。
使用功能接口,您可以在构造函数中添加参数 Function<JsonElement,E>
并使用它来创建通用元素的实例:
public class MyClass<E extends MyEntityClass> {
public List<E> myList = new LinkedList<>();
public MyClass(JsonArray params, Function<JsonElement, E> factoryE) {
for(JsonElement param : params){
myList.add(factoryE.apply(param));
}
}
}
您可以用这种方式实例化您的 class :
MyClass<MyEntityClass> myClass = new MyClass<MyEntityClass>(MyEntityClass::new);
使用接受 JsonElement
参数的构造函数定义的 MyEntityClass
:
public class MyEntityClass {
...
public MyEntityClass(JsonElement jsonElement){
...
}
...
}
当然,你可以在没有功能接口的情况下实现同样的事情,但会更冗长。