11

这个问题与 Android 有关,因为我的需求存在于那个领域,但这个问题仍然适用于整个 Java;我将在这里使用一些 Android 术语,例如Activity, FragmentActivity,ListActivity等...

我需要实现一个包含必须在整个应用程序中使用的功能的抽象基类,更具体地说,每个人都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

但显然那是行不通的;或者我只是做错了。那么有什么方法可以实现这种代码重用并避免重复,还是我只是简单地重复我的代码?

谢谢!

4

2 回答 2

3

通常,使用 Fragments 可以帮助解决此类问题。在您的特定情况下,尽管我看到您也想使用 ListActivity。这让事情变得更难

如您所知,Java 在这里帮不了您。您不能继承多个实现(List 和 MyBase)。没有简单的答案。我可以建议两件事:

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

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

于 2013-03-12T04:37:54.550 回答
0

创建一个名为BaseActivity. 实现onCreate()它,它应该涵盖活动操作的基础知识。创建从 扩展的其他类BaseActivity,并允许它们覆盖该方法,当且仅当它们做一些比 . 稍微特殊的事情时BaseActivity

这里的主要思想是,Activity您拥有或创建的任何东西都以某种方式相互关联,它们执行类似的代码操作。只有在特殊情况下,您才需要做一些额外的事情,从而覆盖onCreate().

于 2013-03-12T04:15:28.587 回答