我正在尝试编写我的第一个库,但我仍然遇到了一些设计问题。
我的库需要很多配置,我已经创建了接口和默认的Impl
类,但现在我的库需要与外部调用进行大量的交互。这也是通过接口完成的,但我感觉用户被迫覆盖了太多的方法,只返回一些默认错误甚至是null
。有没有更好的方法来制作所有这些“你可以,但你不必实施”部分更可选吗?
答案 0 :(得分:10)
即使您创建了一个接口,创建一个抽象基类通常也是有意义的,库的用户可以扩展该基类以实现该接口。
抽象基类可以提供方法的默认实现,这样您的库用户就不需要自己创建它们了。它还可以定义API用户必须实现的抽象方法,如果他们想要创建具体的子类。
public abstract class MyBaseClass implements MyInterface {
// abstract method
// anyone who extends must implement this
public abstract void myMethod1();
// default error implementation
// overriding is optional, but if used it will throw an error
public void myMethod2() {
throw new UnsupportedOperationException();
}
// default implementation that subclasses may find useful:
public void doBothMethods() {
myMethod1();
myMethod2();
}
}
答案 1 :(得分:2)
这肯定是一个不太理想的领域。它已经被认可,并且使用public defender methods解决了这个问题。该链接将带您进入(官方)语言增强提案。
所以我建议你坚持使用静态库方法来接口并提供每个方法的默认实现。这样,你就可以准备好jummy defender方法的优点了。