【发布时间】:2015-07-02 16:56:10
【问题描述】:
我创建了一个带有三个构造函数的抽象基类BaseModelDao。当我创建一个扩展 BaseModelDao 的类 SubscriberScoreDao 时,我必须重新定义子类中的所有三个构造函数以避免编译时错误。有没有办法利用我在BaseModelDao 中定义的构造函数,而不必在每个子类中重新实现相同的逻辑?
BaseModelDao
public abstract class BaseModelDao<T extends Model> {
private static final String TAG = BaseModelDao.class.getSimpleName();
private List<T> mModelList;
protected BaseModelDao() {
mModelList = new ArrayList<>();
}
protected BaseModelDao(Response<T>[] responseArray) {
mModelList = fromResponseArray(responseArray);
}
protected BaseModelDao(Response<T> response) {
mModelList = fromResponse(response);
}
public List<T> getModelList() {
return mModelList;
}
public abstract Class<T> getModelClass();
private List<T> fromResponse(Response<T> response) {
List<T> responseList = response.getResultData();
return responseList;
}
public List<T> fromResponseArray(Response<T>[] responseArray) {
return fromResponse(getResponseObjectFromArray(responseArray));
}
// more helper methods...
}
SubscriberScoreDao
public class SubscriberScoreDao extends BaseModelDao<SubscriberScore> {
public static final String TAG = SubscriberScoreDao.class.getSimpleName();
public SubscriberScoreDao(){
super();
}
public SubscriberScoreDao(Response<SubscriberScore>[] responseArray) {
super(responseArray);
}
public SubscriberScoreDao(Response<SubscriberScore> responseArray) {
super(responseArray);
}
@Override
public Class<SubscriberScore> getModelClass() {
return SubscriberScore.class;
}
}
上面显示的构造函数是我要消除的构造函数。当我想在代码中使用SubscriberScoreDao 时,它看起来像这样。
LendingRestClient.getInstance().getSubscriberScoring(new Callback<Response<SubscriberScore>[]>() {
@Override
public void success(Response<SubscriberScore>[] responseArray, retrofit.client.Response response) {
mSubscriberScoreDao = new SubscriberScoreDao(responseArray);
}
@Override
public void failure(RetrofitError error) {
}
});
如果调用super() 的三个构造函数未在SubscriberScoreDao 中定义,则代码在此行抛出编译时错误:
mSubscriberScoreDao = new SubscriberScoreDao(responseArray);
错误:
有没有办法不在每个子类中定义构造函数并避免这个错误?
【问题讨论】:
-
所以无论如何我都必须定义这些构造函数?
标签: java android generics constructor