Java 如何向已经扩展了另一个类的类添加可重用逻辑?
我有多个扩展Android框架类的视图:Java 如何向已经扩展了另一个类的类添加可重用逻辑?,java,android,design-patterns,Java,Android,Design Patterns,我有多个扩展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
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()
}
上述方法是其中一种方法的过度简化版本。重要的部分是:
因为Java不支持多重继承,所以必须使用接口 可能重复:
因此,您的实现应该是好的。因为Java不支持多重继承,所以您必须使用接口 可能重复:
因此,您的实现应该是好的。Java 8接口中的默认方法似乎解决了这个问题。尽管如此,我不能使用Java8,除非我将支持的最低android版本改为24;在支持Java8的平台上,这种方法是正确的。因此,将此答案标记为已接受。Java 8接口中的默认方法似乎可以解决此问题。尽管如此,我不能使用Java8,除非我将支持的最低android版本改为24;在支持Java8的平台上,这种方法是正确的。因此,将此答案标记为已接受。我认为抽象类没有问题。您可以让抽象类扩展android.View,视图扩展抽象类。否则,我不知道您的Android版本是否允许使用Java8,但请注意,在Java8中,接口可以有默认(具体)方法。最后,当继承不起作用时,下一个选项通常是compositionImageView、TextView等,它们是框架提供的类,具有许多逻辑,我无法自己编写。直接扩展视图是一场噩梦!哦,好吧,我还以为是你呢
getParentView
来自哪里?我在View
的文档中没有看到它(仅getParent
)对不起,为了清楚起见,我提到了getParentView()。我假设不是每个人都理解getParent()。我看不出抽象类有什么问题。您可以让抽象类扩展android.View,视图扩展抽象类。否则,我不知道您的Android版本是否允许使用Java8,但请注意,在Java8中,接口可以有默认(具体)方法。最后,当继承不起作用时,下一个选项通常是compositionImageView、TextView等,它们是框架提供的类,具有许多逻辑,我无法自己编写。直接扩展视图是一场噩梦!哦,好吧,我还以为是你呢getParentView
来自哪里?我在View
的文档中没有看到它(仅getParent
)对不起,为了清楚起见,我提到了getParentView()。我想不是每个人都能理解getParent()。听起来像是一个评论而不是答案,加上他已经有了一个interfaceAgree,我想,他真的不能更好地回答当前的问题,不:p但也许像评论而不是答案这样问问题是错误的,加上他已经有了一个interfaceAgree,我想,他现在的问题不可能做得更好,不:p,但也许这个问题问错了
void notifyError(Exception e){
Log.e(TAG, e.getMessage());
getParentView().notifyError(e);
}