gpt4 book ai didi

java - 默认接口(interface)实现

转载 作者:行者123 更新时间:2023-12-02 04:16:03 26 4
gpt4 key购买 nike

在Android中,当我使用AsyncTask时,我通常使用接口(interface)方法,这样我就可以在activity中实现它:

 public class DownloadTask extends AsyncTask<String, Integer, Response> {

private Context context;
private DownloadTaskListener listener;
private List<MyObject> objectList;


public interface DownloadObjectsTaskListener {
void startTask();
void finishTask();
void ObjectsDownloaded(List<Object> ObjectList);

void withoutInternet();
}

public DownloadObjectsTask(Context context) {
this.context = context;
}


public void setListener(DownloadObjectsTaskListener listener) {
this.listener = listener;
}

@Override
protected void onPreExecute() {
super.onPreExecute();

if (CommonUtils.isThereInternetConnection(context)) {
listener.startTask();
} else {
listener.withoutInternet();
cancel(true);
}
}

protected Response doInBackground(String... urls) {
RestApiObject api2 = new RestApiObject();
return api2.getMyObjects();

}

protected void onPostExecute(Response results) {
listener.finishTask();
if (results != null) {
if (results.body() != null) {
ObjectsResponse request = (ObjectsResponse) results.body();
ObjectList = request.getObjectsList();
listener.ObjectsDownloaded(ObjectList);
} else {
ResponseBody jsonObject = results.errorBody();
try {
Log.d(DEBUG, jsonObject.string());
} catch (IOException e) {
e.printStackTrace();
}
}
} else {
Log.d(DEBUG, "result is null");
}

}
}

然后在我的Activity中,我实现接口(interface)并定义方法。

问题是对于诸如 withoutInternet() 这样的方法,方法定义将始终相同,因此每次我重新定义方法实现时,它都只是冗余代码,即使我在中提取代码一个方法。

有没有办法只定义一次withoutInternet()

最佳答案

当然,您需要一个抽象类而不是接口(interface)。如下所示:

public abstract DefaultDownloadObjectTasksListener implements DownloadObjectsTaskListener{
abstract void startTask();
abstract void finishTask();
abstract void ObjectsDownloaded(List<Object> ObjectList);

void withoutInternet(){
//some default implementation
}
}

然后您可以扩展(与实现)抽象类覆盖您想要为其提供功能的方法。因为前三个方法是抽象的,所以您需要重写它们。但是,由于 withoutInternet 不是抽象的,因此将使用默认实现,除非您选择覆盖它。

编辑要解决您的问题:解决方案是让您的 DefaultDownloadObjectTasksListener 扩展 AppCompatActivity 并实现 DownloadObjectsTaskListener > 然后从您的 Activity 扩展 DefaultDownloadObjectTasksListener

或者,实际上,如果您确实想要默认实现,我会做的是使用匿名子类作为监听器。

关于java - 默认接口(interface)实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33308656/

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