是否可以在 Java 中创建参数化类的实例?



我在类创建中具有相同的逻辑,但实际类是不同的。是否可以以某种方式创建参数化类的实例?

下面是一个示例:

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 的构造函数的超类。

我知道Java不允许创建参数化类,但是是否有可能以某种方式解决这个问题?

泛型在编译后被删除。
因此,当然,像您尝试的那样直接实例化参数化类型是不可能的。

解决方法是将工厂方法传递给构造函数。

使用函数接口,您可以在构造函数中添加参数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));
}
}
}

你可以这样实例化你的类:

MyClass<MyEntityClass> myClass = new MyClass<MyEntityClass>(MyEntityClass::new);

使用接受JsonElement参数的构造函数定义的MyEntityClass

public class MyEntityClass {
...
public MyEntityClass(JsonElement jsonElement){
...
}
...
}

当然,您可以在没有功能界面的情况下实现同样的事情,但它会更冗长。

相关内容

  • 没有找到相关文章

最新更新