我有多个扩展 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()
}
上面的方法是其中一种方法的过度简化版本。重要的部分是:
- 所有 View 都应该有一个notifyError()方法
- 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/