Java编写库

标签 java inheritance interface option-type

我正在尝试编写我的第一个库,但我仍然遇到一些设计问题。

我的库需要大量配置,为此我创建了接口(interface)和默认 Impl 类,但现在我的库需要与外部调用进行大量交互。这也是通过接口(interface)完成的,但我感觉用户被迫覆盖太多只返回一些默认错误甚至 null 的方法。有没有更好的方法让所有这些“你可以但你不必实现”的部分更加可选?

最佳答案

即使您创建了一个接口(interface),创建一个抽象基类通常也是有意义的,您的库的用户可以扩展该基类以实现该接口(interface)。

抽象基类可以提供方法的默认实现,这样您的库用户就不需要自己创建这些方法。它还可以定义 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();
    }
}

关于Java编写库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9797368/

相关文章:

java - AP CS 实践 - OOP

java - 对数组(或两个)进行插值

java - Flink (1.3.2) 将记录广播给每个运算符(operator)一次

java - 使用比较器对对象的 ArrayList 进行排序,代码无法访问

c++ - 是否所有虚函数都需要在派生类中实现?

iphone - .h文件名与@interface名称iOS不匹配时会发生什么

java - Android:查找字符串中的特定字符

java - NotSerializableException 转义 Spring Controller 并导致 Google App Engine 队列出现问题

java - 是否可以让一个类(class)有多个超类(class)?

go - Stringer 方法需要值