【发布时间】:2013-03-12 04:02:43
【问题描述】:
这个问题与 Android 有关,因为我的需求存在于那个领域,但这个问题仍然适用于整个 Java;我将在这里使用一些 Android 术语,例如Activity、FragmentActivity、ListActivity 等...
我需要实现一个包含必须在整个应用程序中使用的功能的抽象基类,更具体地说,每个Activity 都必须使用此功能,但我希望它由基类自动处理。我的问题是我在应用程序中有许多不同类型的活动,例如Activity、FragmentActivity 和ListActivity,所有这些都扩展了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
但显然这行不通;或者我只是做错了。那么有什么方法可以实现这种代码重用并避免重复,还是我只是简单地重复我的代码?
谢谢!
【问题讨论】:
-
我遇到了同样的问题,我所做的是,我只有一个扩展 FragmentActivity 的基本活动,我在需要其他功能时使用片段,但我仍然可以在 FragmentActivity 中创建列表视图
-
是否可以简单地将所有这些 onCreate 方法中的通用代码移动到一个实用程序类中,并让它们调用它?
-
@DavidConrad 是的,这是可能的,并且类似于
G. Blake Meike答案的选项 2,但即使这样也有一定程度的代码重复,因为我必须在每个每个 Activity 都使用这个实用程序类,这会带来一系列问题,比如确保开发人员记得使用这个实用程序类,希望一个或两个 Activity 不会从裂缝中溜走并向用户呈现不稳定的行为。 -
开发人员只需要记住扩展适当的基类,不是吗?
public class ZooListActivity extends BaseListActivity。当然,即使 Java 有多重继承,开发人员仍然需要记住扩展 BaseListActivity 而不是 ListActivity,对吧? -
@DavidConrad 不,我明白你的意思,在我的例子中,它只是 onCreate 中的一行,但实际上我的代码需要 1 行代码用于(当前)5 种方法,我需要为我需要的每种类型的 Activity 复制 BaseListActivity 所以基本上我会有一个扩展 Activity 的基类,一个扩展 ListActivity 的基类,一个扩展 FragmentActivity 的基类,依此类推,我需要的每一个......所有这些都会在实用程序类中调用方法的行几乎是彼此完全相同的副本。
标签: java android inheritance