Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java编写库_Java_Inheritance_Interface_Optional - Fatal编程技术网

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可用时,您就做好了准备。

有关这方面的一些好例子,请查看它及其子类。