这个问题与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
但显然这不起作用;或者我可能只是做错了。那么有没有办法完成这个代码重用并避免重复,或者我只是简单地复制我的代码?
谢谢!
答案 0 :(得分:3)
通常,使用Fragments可以帮助解决这类问题。在您的特定情况下,虽然我看到您也想使用ListActivity。这使得它更难
如您所知,Java无法帮助您。您不能继承多个实现(List和MyBase)。没有简单的答案。我可以提出两点建议:
List(Activity,Fragment)是对其基类的非常简单的扩展。您可以通过合理的工作量构建自己的,继承自您的基类。它们可能比框架中的更简单。也许那没关系。
代表。编写一个实现常见行为但不从Activity / Fragment继承的类。在Fragment / Activity类的初始化期间创建其中一个对象。只要有共同的行为,就将其委托给委托实例。
答案 1 :(得分:0)
创建一个名为BaseActivity
的抽象类。为其实施onCreate()
,其中应涵盖活动操作的基础知识。创建从BaseActivity
扩展的其他类,并允许它们覆盖该方法,当且仅当它们执行比BaseActivity
更特殊的操作时。
这里的主要想法是,无论你拥有或创建的Activity
以某种方式相互关联,他们都会进行类似的代码操作。只有在特殊情况下,您才需要做一些额外的事情,因此会覆盖onCreate()
。