多个超类和代码重用

时间:2013-03-12 04:02:43

标签: java android inheritance

这个问题与Android有关,因为我的需求存在于该领域,但问题仍然适用于整个Java;我将在此处使用一些Android术语,例如ActivityFragmentActivityListActivity等等。

我需要实现一个抽象基类,其中包含必须在整个应用程序中使用的功能,更具体地说,每个Activity必须使用此功能,但我希望它由基类自动处理。我的问题是我在应用程序中有许多不同类型的活动,例如ActivityFragmentActivityListActivity,所有活动都延伸Activity(减去Activity疗程)。

由于基类中的代码对于Activity的每个实现都是完全相同的,有没有办法避免代码重复并需要为每种类型的Activity创建基类?

我想避免的事情:

public abstract class BaseActivity extends Activity
{
    public void onCreate(Bundle savedBundle)
    {
        // code goes here, will be the exact same for all these base classes
    }
}

public abstract class BaseFragmentActivity extends FragmentActivity
{
    public void onCreate(Bundle savedBundle)
    {
        // code goes here, will be the exact same for all these base classes
    }
}

public abstract class BaseListActivity extends ListActivity
{
    public void onCreate(Bundle savedBundle)
    {
        // code goes here, will be the exact same for all these base classes
    }
}

public class MyMainActivity extends BaseActivity
{
}

public class MyUserList extends BaseListActivity
{
}

public class SomeActivityThatNeedsToBeAFragment extends BaseFragmentActivity
{
}

我试图通过使用以下

之类的东西来利用泛型
public abstract class BaseActivity<T extends Activity> extends T

但显然这不起作用;或者我可能只是做错了。那么有没有办法完成这个代码重用并避免重复,或者我只是简单地复制我的代码?

谢谢!

2 个答案:

答案 0 :(得分:3)

通常,使用Fragments可以帮助解决这类问题。在您的特定情况下,虽然我看到您也想使用ListActivity。这使得它更难

如您所知,Java无法帮助您。您不能继承多个实现(List和MyBase)。没有简单的答案。我可以提出两点建议:

  • List(Activity,Fragment)是对其基类的非常简单的扩展。您可以通过合理的工作量构建自己的,继承自您的基类。它们可能比框架中的更简单。也许那没关系。

  • 代表。编写一个实现常见行为但不从Activity / Fragment继承的类。在Fragment / Activity类的初始化期间创建其中一个对象。只要有共同的行为,就将其委托给委托实例。

答案 1 :(得分:0)

创建一个名为BaseActivity的抽象类。为其实施onCreate(),其中应涵盖活动操作的基础知识。创建从BaseActivity扩展的其他类,并允许它们覆盖该方法,当且仅当它们执行比BaseActivity更特殊的操作时。

这里的主要想法是,无论你拥有或创建的Activity以某种方式相互关联,他们都会进行类似的代码操作。只有在特殊情况下,您才需要做一些额外的事情,因此会覆盖onCreate()