如何不返回超类中的returntype

如何不返回超类中的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”错误标记我的方法。有没有办法避免这个错误消息,因为我的子类有一个返回值,所以它应该没有问题,应该吗?

+2

我不认为你应该返回一个'片段'。这是一个UI元素。取而代之的是返回一些数据在* UI –

+0

内显示*我同意这条评论。 – apelsoczi

+0

在我的应用程序中,片段由AsyncTask编写。然后在onPostExecute中调用我的活动中的一个方法来显示片段。 AsyncTask由我的活动启动,所以我认为它不应该是一个问题。 –

注意:这是一个普遍的答案,忽略了问题中显示的具体情况,这可能有意义或无意义(请参阅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*/; 
    } 
} 
+0

我对这个解决方案有所了解,但不确定是否有另一种方法来做到这一点。我将使用这个例子 –

在参考Ajay P. Prajapati答案 - 我不认为这解决了他的要求正确。 AsyncTask在java语言中使用java对象Void以吸收void的方式 - 注意大写和小写V的区别。我的建议是更改为AsyncTask<Void, Object, Object>,在您的抽象类中可以使用return new Void()并在您的子类你可以return fragment

+0

这将是一个解决方案,但我认为安德烈亚斯的回答是做到这一点的小方法 –