我有多个扩展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()调用。我的所有视图都有在其notifyerror()方法中调用helper类的代码。我觉得这种冗余是不对的。
有没有更好的方法来实现这一点?如果有人对这个需求感到好奇,这里是:如果我的任何子视图出现错误,我希望递归地通知所有父视图该错误(直到我们到达视图层次结构中最顶层的父视图)。所有父母对每个孩子都有相同的错误处理逻辑。
编辑:根据注解,让我为notifyerror()方法共享一个简化的错误处理逻辑:
void notifyError(Exception e){
Log.e(TAG, e.getMessage());
getParentView().notifyError(e);
}
2条答案
按热度按时间jexiocij1#
Java8接口中的默认方法似乎可以解决这个问题。尽管如此,我不能使用java8,除非我将最低支持的android版本移动到24;在支持Java8的平台上,这种方法是正确的。因此,将此答案标记为已接受。
hujrc8aj2#
因为java不支持多重继承,所以必须使用接口。
可能的重复:如何从java中的多个基类继承?
所以你的计划应该是好的。