java - 如何向已经扩展另一个的类添加可重用逻辑?

标签 java android design-patterns

我有多个扩展 Android 框架类的 View :

class A extends ImageView     // ImageView extends android.View

class B extends TextView      //TextView extends android.View

class C extends LinearLayout     //LinearLayout extends android.ViewGroup which extends android.View

我有一个可以应用于android.view的操作

void notifyError(){
  getParentView().notifyError()     //I have type checks on getParentView()
}

上面的方法是其中一种方法的过度简化版本。重要的部分是:

  1. 所有 View 都应该有一个notifyError()方法
  2. notifyError 中的代码对于所有 View 都完全相同

理想情况下,我应该有一个所有 View 都可以扩展的抽象类。我本可以在抽象类中给出notifyError()的基本实现,一切都很好。但这个解决方案超出了范围,因为 View 无法从多个类扩展。

我目前的解决方案是让我的所有 View 实现一个接口(interface),这会强制所有 View 重写notifyError()。我创建了一个静态帮助器类,然后由 notifyError() 调用它。我所有的 View 都有在其notifyError() 方法中调用辅助类的代码。我觉得这种冗余不合适。

有没有更好的方法来实现这一目标?如果有人对这个要求感到好奇,这里是:如果我的任何 subview 出现错误,我想递归地通知所有父 View 该错误(直到我们到达 View 层次结构中最顶层的父 View )。所有父级对每个子级都有相同的错误处理逻辑。

编辑:根据评论,让我分享一下notifyError()方法的简化错误处理逻辑:

void notifyError(Exception e){
  Log.e(TAG, e.getMessage());
  getParentView().notifyError(e);
}

最佳答案

由于Java不支持多重继承,因此必须使用接口(interface)。

可能的重复:How to inherit from multiple base classes in Java?

所以你的实现看起来不错。

关于java - 如何向已经扩展另一个的类添加可重用逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37127572/

相关文章:

android - 在屏幕方向更改时旋转 View (但不是布局)

java - 我对如何在我的代码中实现单例模式并让它调用我的对象类和方法感到困惑

java - 将接口(interface)嵌套在具体类中的可行设计替代方案是什么?

java - 使用 StringBuffer 替换长字符串中的子字符串

java - 自定义微调器下拉箭头

Java 流 - 在可空列表上进行流式处理的优雅方式

android - Firebase 身份验证 - 开源 Android 应用程序

php - 如何只允许数组中的数据进入输入字段?

java - 如何让我的 JTextArea 或 JTextPane 自动创建一个新行?

java - 属性的值无法在 beforeInsert() 内更新