Java编写库

use*_*232 7 java inheritance interface optional

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

我的库需要很多配置,我已经创建了接口和默认Impl类,但现在我的库需要与外部调用进行大量的交互.这也是通过接口完成的,但我感觉用户被迫覆盖太多方法,只返回一些默认故障甚至null.是否有一些更好的方法来使所有这些"你可以,但你不必实现"部分更可选?

mik*_*era 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 有关这方面的一些好例子,请查看[`java.util.AbstractCollection`](http://docs.oracle.com/javase/6/docs/api/java/util/AbstractCollection.html)及其子类. (3认同)