2012-03-21 11 views
7

私は最初のライブラリを書くつもりですが、まだいくつかの設計上の問題にぶつかっています。Javaのライブラリを書く

私のライブラリは、私が作成したインターフェイスとデフォルトのImplクラスの多くの設定を必要としていますが、私のライブラリは呼び出し側とのやりとりを多く必要とします。これはまたインターフェイスを介して行われますが、私はユーザーがいくつかの既定のフォールトを返すあまりにも多くのメソッドをオーバーライドすることを余儀なくされていると感じています。null。これらのすべてを「あなたはできるが、実装する必要はありません」というパーツをより多くのオプションにするための、より良い方法がいくつかありますか?

答えて

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(); 
    } 
} 
+3

これの良い例については、['java.util.AbstractCollection'](http://docs.oracle.com/javase/6/docs/api/java/util/AbstractCollection.html)とそのサブクラス。 – Taymon

2

これは確かに理想的なアプローチではない領域です。それはそのように認識されており、public defender methodsを使用して解決されています。このリンクをクリックすると、(公的な)言語拡張提案が表示されます。

静的ライブラリメソッドを使用して、メソッドのデフォルト実装を提供することをお勧めします。そうすれば、あなたは、ジャムディフェンダーメソッドの良さが利用可能になったときに準備されます。

関連する問題