gpt4 book ai didi

java - 实例化通用抽象类的子(具体)类,其构造函数需要其他参数类

转载 作者:行者123 更新时间:2023-12-01 10:44:59 26 4
gpt4 key购买 nike

我尝试使用的库有一个通用抽象类,其中有两个实现该基础的子类。我想编写一个类,它将根据构造函数参数的参数类型自动创建其中一个子级的实例。

  • 基类没有默认构造函数
  • 基类的构造函数也需要其他通用类的实例

代码片段

public abstract class JsonRequest<T> {
public JsonRequest(String body, Listener<T> listener) {}
}
public class JsonArrayRequest extends JsonRequest<JSONArray> {
public JsonArrayRequest(JSONArray body, Listener<JSONArray>) {}
}
public class JsonObjectRequest extends JsonRequest<JSONObject> {
public JsonObjectRequest(JSONObject body, Listener<JSONObject>) {}
}

现在我想包装两个具体的子级,以便包装器/工厂能够根据参数类型的类自动决定调用/实例化哪一个,就像这样(我会遇到各种编译器错误)

public class RequestFactory<T> {
private Listener<T> mListener;

public RequestFactory(T body, Listener<T> lis) {
mListener = lis;
if (body instanceof JSONArray) {
// Call JsonArrayRequest constructor
JsonArrayRequest(body, mListener);
}
else if (body instanceof JSONObject) {
// Call JsonObjectRequest constructor
JsonObjectRequest(body, mListener);
}
}
}
  • 我该怎么做? (最好不进行类型转换)
  • 是否有更好的方法包装 JsonArrayRequestJsonObjectRequest 以便根据传递的 body 参数类型自动调用它们的构造函数?<
  • 这在 Java 中可能吗?

(我实际上正在尝试使用 Android's Volley library )

最佳答案

您正在寻找Abstract Factory Design Pattern

public interface RequestFactory<T> {
public JsonRequest<T> create(T body, Listener<T> listener);
}

public class ArrayRequestFactory implements RequestFactory<JSONArray> {
@Override
public JsonArrayRequest create(JSONArray body, Listener<JSONArray> listener) {
return new JsonArrayRequest(body, listener);
}
}

public class ObjectRequestFactory implements RequestFactory<JSONObject> {
@Override
public JsonObjectRequest create(JSONObject body, Listener<JSONObject> listener) {
return new JsonObjectRequest(body, listener);
}
}

构造函数是通过动态分派(dispatch)而不是 if 条件选择的。

关于java - 实例化通用抽象类的子(具体)类,其构造函数需要其他参数类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34238750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com