如何不返回超类中的returntype
我有一个关于抽象类的问题。如何不返回超类中的returntype
我正在开发一个android应用程序,并写了一个抽象类,它扩展了AsyncTask类的虚实,片段,片段>类。 doInBackground方法在我的抽象类中已经有一个主体,但我不想在此返回任何内容。现在我的继承这个抽象类的子类应该重写doInBackground方法,调用super,做一些工作然后返回一个值。
在我的抽象类中的方法是这样的:
@Override
protected Fragment doInBackground(Void... params) {
//do some work without returning a value
}
,并在我的扩展子类中的方法是这样的:
@Override
protected Fragment doInBackground(Void.. params) {
super.doInBackground();
MyFragment fragment = new MyFragment();
//do some work with the fragment
return fragment;
}
所以,如果我没有return语句中我抽象类Android Studio用“Missing return statement”错误标记我的方法。有没有办法避免这个错误消息,因为我的子类有一个返回值,所以它应该没有问题,应该吗?
注意:这是一个普遍的答案,忽略了问题中显示的具体情况,这可能有意义或无意义(请参阅comment)。
如果该方法应该返回一个值,但超类中的实现不能返回值,那么它不是该方法的实现。
如果您仍想在超类中使用一些通用代码,请使用单独的方法编写该代码。
abstract class Super {
public abstract MyObj method();
protected final void commonLogic() {
// common logic here
}
}
class Sub extends Super {
@Override
public MyObj method() {
commonLogic();
// code here
return /*something*/;
}
}
如果要强制执行共同的逻辑是执行,使用template method pattern。
abstract class Super {
public final MyObj method() {
// common logic here
return afterCommonLogic();
}
protected abstract MyObj afterCommonLogic();
}
class Sub extends Super {
@Override
protected MyObj afterCommonLogic() {
// code here
return /*something*/;
}
}
我对这个解决方案有所了解,但不确定是否有另一种方法来做到这一点。我将使用这个例子 –
在参考Ajay P. Prajapati答案 - 我不认为这解决了他的要求正确。 AsyncTask在java语言中使用java对象Void
以吸收void
的方式 - 注意大写和小写V的区别。我的建议是更改为AsyncTask<Void, Object, Object>
,在您的抽象类中可以使用return new Void()
并在您的子类你可以return fragment
。
这将是一个解决方案,但我认为安德烈亚斯的回答是做到这一点的小方法 –
我不认为你应该返回一个'片段'。这是一个UI元素。取而代之的是返回一些数据在* UI –
内显示*我同意这条评论。 – apelsoczi
在我的应用程序中,片段由AsyncTask编写。然后在onPostExecute中调用我的活动中的一个方法来显示片段。 AsyncTask由我的活动启动,所以我认为它不应该是一个问题。 –