【问题标题】:How to share code between different Classes?如何在不同的类之间共享代码?
【发布时间】:2018-05-25 11:25:33
【问题描述】:

您好,我有一个相当复杂的应用程序,需要在 Android 中对“Activity”、“Service”和“FragmentActivity”进行子类化(但这个问题在纯 Java 中仍然有效)

三个类中的每一个都在“我的层”中使用一组实用程序进行扩展,例如显示 Toast 的特定方式或处理配置或读取磁盘上的文件等的特定方式。

现在我为所有 3 种类型的类创建了一个通用的界面(MyUtilities),例如

    public class MyActivity extends Activity implements MyUtilities
    public class MyFragmentActivity extends FragmentActivity implements MyUtilities
    public class MyService extends Service implements MyUtilities


   public class MyActivity1 extends MyActivity
   public class MyFragmentActivity1 extends MyFragmentActivity
   public class MyService1 extends MyService

但这使我最终复制和粘贴所有 3 个类的常用方法,因为我无法在接口中定义字段和方法。有没有更好的方法来做到这一点?从长远来看,复制代码极易出错。

我查看了抽象类,但不确定在这种情况下如何使用它们。理想情况下,我需要像“双重扩展”这样的

public class MyActivity extends Activity, MyUtilities

这显然是不允许的,但可以解决我的问题。

请给点意见?

谢谢!

PS:我已经尽可能在公共类上使用静态方法

根据要求,这里有一个简单的例子。 3 个对象中的每一个都需要能够支持一个配置字段,并且每个对象都包含以下内容

private Configuration config

public Configuration getConfiguration(){return config;}

public void setConfiguration(Configuration cfg){this.config=cfg;}

使用接口有助于要求方法存在,但我仍然需要复制和粘贴我不太喜欢的代码。

【问题讨论】:

  • 请分享更多代码,答案只是在分离类的方法中提取逻辑。但是,为了获得更好的帮助,请分享您的代码。
  • 谢谢,我在正文中添加了一个简单的例子

标签: java android interface abstract-class subclassing


【解决方案1】:

看看这个方法:

我们的想法是创建您的 Custom Activity 类,该类将扩展 Activity 并实现 MyUtilities 接口。这样,Android 层会将您的自定义类理解为 Activity,将您的层理解为 MyActivity 以及 MyUtilities

public class CustomActivity extends Activity implements MyUtilities {
   private Configuration config

   public Configuration getConfiguration(){return config;}

   public void setConfiguration(Configuration cfg){this.config=cfg;}
}

Android 层会将MyActivity 类的实例理解为Activity

您的层会将 MyActivity 类的实例理解为 CustomActivity 以及 MyUtilities。

public class MyActivity extends CustomActivity {

}

希望这会有所帮助!

【讨论】:

  • 谢谢,我这样做时遇到的问题是当我尝试对例如做同样的事情时一个服务,在这种情况下不能扩展 CustomActivity。还是我错过了什么?
  • 也许你可以试试装饰器模式?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 2012-10-21
  • 2019-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多