Java编写库
我正在尝试编写我的第一个库,但我仍然遇到一些设计问题Java编写库,java,inheritance,interface,optional,Java,Inheritance,Interface,Optional,我正在尝试编写我的第一个库,但我仍然遇到一些设计问题 我的库需要很多配置,我已经为这些配置创建了接口和默认的Impl类,但现在我的库需要与外部调用进行大量交互。这也是通过接口实现的,但我感觉用户被迫重写太多只返回一些默认错误甚至null的方法。是否有更好的方法使所有这些“您可以但不必实现”的部分更具可选性?即使您创建了一个接口,创建一个抽象基类通常也是有意义的,您的库的用户可以扩展它来实现接口 抽象基类可以提供方法的默认实现,这样库用户就不需要自己创建这些方法。它还可以定义抽象方法,如果API用
我的库需要很多配置,我已经为这些配置创建了接口和默认的
Impl
类,但现在我的库需要与外部调用进行大量交互。这也是通过接口实现的,但我感觉用户被迫重写太多只返回一些默认错误甚至null
的方法。是否有更好的方法使所有这些“您可以但不必实现”的部分更具可选性?即使您创建了一个接口,创建一个抽象基类通常也是有意义的,您的库的用户可以扩展它来实现接口
抽象基类可以提供方法的默认实现,这样库用户就不需要自己创建这些方法。它还可以定义抽象方法,如果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();
}
}
这当然是一个没有理想方法的领域。人们已经认识到了这一点,并且已经使用。该链接将带您访问(官方)语言增强建议
所以我建议您坚持使用接口,并使用静态库方法提供每个方法的默认实现。这样,当jummy defender方法goodness可用时,您就做好了准备。有关这方面的一些好例子,请查看它及其子类。