我有多个视图扩展Android框架类:
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()
}
上述方法是其中一种方法的过度简化版本。重要的是:
理想情况下,我应该有一个抽象类,所有视图都可以扩展。我本可以在抽象类中给出notifyError()的基本实现,并且一切都很好。但是这个解决方案超出了范围,因为视图不能从多个类扩展。
我目前的解决方案是让我的所有视图都实现一个接口,这会强制所有视图覆盖notifyError()。我创建了一个静态助手类,然后由notifyError()调用。我的所有视图都有代码在notifyError()方法中调用helper类。这种冗余对我来说不合适。
有没有更好的方法来实现这一目标?如果有人对这个要求感到好奇,那么它就是:如果我的任何一个子视图都出错了,我想以递归方式通知所有父视图错误(直到我们到达视图层次结构中最顶层的父视图)。所有父母对每个孩子都有相同的错误处理逻辑。
编辑:根据评论,让我分享一下notifyError()方法的简化错误处理逻辑:
void notifyError(Exception e){
Log.e(TAG, e.getMessage());
getParentView().notifyError(e);
}
答案 0 :(得分:0)
答案 1 :(得分:0)
Java 8接口中的默认方法似乎解决了这个问题。虽然,我不能使用Java 8,除非我将我的最低支持Android版本移动到24;这种方法在支持Java 8的平台上是正确的方法。因此,将此答案标记为已接受。