2

プロジェクトのコードを閲覧しているときにBinaryHeap、2 つの実装 (Array と Tree を使用) がインターフェイス自体の内部にパックされている実装を見つけました。やや複雑に感じました。コードは次のとおりです。

public interface BinaryHeap<T extends Comparable<T>> extends IHeap<T>  {
   //some variables and other declarations.

   public static class BinaryHeapArray<T extends Comparable<T>> implements BinaryHeap<T> { 
     //Implementation based on Array
   }

   public static class BinaryHeapTree<T extends Comparable<T>> implements BinaryHeap<T> {
     //Implementation based on Tree
   }
}

このアプローチに問題はありますか?読みやすさの点でどのように改善できますか?

4

2 に答える 2

1

それ自体は間違っていません (つまり、ライブラリはコンパイルされます :-)) が、間違いなく厄介です。少なくとも、インターフェイスを使用するたびに常に両方の実装をインポートする必要があります。

インターフェイスをスタンドアロン インターフェイスとして使用し、実装のために他のトップレベル クラスに宣言します。

于 2015-01-03T08:55:20.810 に答える
0

@Mureinik が述べたように、コードの可読性は、

  1. スタンドアロン インターフェイス
  2. これらのクラスをトップレベル クラスとしてインターフェイス内に配置します。

これらのクラスをインターフェイス内に配置するという考えには、次の理由が考えられます。BinaryHeapArrayおよび BinaryHeapTree クラスを BinaryHeap に強力にバインドします。b. もう 1 つの理由は、インターフェイス内で変更可能なデータを保持することです (インターフェイス内のすべてのフィールドが暗黙的に final であることをご存知かもしれません)。インターフェイス内でクラスを宣言することにより、共通の MODIFIABLE データを持つことができます。

于 2015-01-05T06:27:14.627 に答える