java实例化泛型抽象类的子(具体)类,其构造函数需要其他参数类
我试图使用的一个库有一个通用抽象类,其中有两个子类实现了基。我想编写一个类,根据构造函数参数的参数类型自动创建其中一个子类的实例
- 基类没有默认构造函数
- 基类的构造函数也需要其他泛型类的实例
片段
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);
}
}
}
- 我该怎么做?(最好不铸造)
- 是否有更好的方法包装
JsonArrayRequest
和JsonObjectRequest
,以便根据传递的body
参数类型自动调用它们的构造函数李> - 这在Java中可能吗李>
(我实际上在尝试使用Android's Volley library)
# 1 楼答案
你在找Abstract Factory Design Pattern
构造函数是通过动态分派来选择的,而不是
if
条件