3

何千ものクラスで実装されているインターフェイスXがあるシナリオがあります。次に、そのインターフェイスXに新しいメソッドを追加します。したがって、すべてのクラスのメソッドがオーバーライドされる問題を解決するために、最小限の方法で変更を加える方法

4

4 に答える 4

7

メソッドの実装がすべてのクラスに共通である場合は、おそらくan のabstract class方が適しinterfaceています。

そうでない場合は、とにかくこれらのメソッドを作成します。


(*)最初はコメントでしたが、回答として入れるように要求されました。

于 2012-05-01T08:48:44.980 に答える
2
  1. 新しいメソッドがそのインターフェイスのすべての実装で意味をなさない場合は、そこに追加しないでください。元のインターフェイスを拡張する新しいインターフェイスを作成してください。
  2. 千のクラスすべてにデフォルトの実装が必要な場合は、インターフェイスを抽象クラスに変更します
于 2012-05-01T08:50:12.923 に答える
0

他の提案 (make itabstractまたは) とは別にextendinterfaceさらに 1 つのオプションがあります。

インターフェイスのすべての実装者が基本クラスを拡張するようにします。このように、メソッドを に追加するときは、interfaceデフォルトの動作を基本クラスに追加し、クラス固有の動作を (できれば) 少数の実装者に追加するだけで済みます。

于 2012-05-01T09:14:42.183 に答える
0

すべてのクラスでこのメソッドの no-op 実装を使用してもかまわず、すべての実装クラスを制御できる場合は、すべてのクラスに移動せずに IntelliJ を使用して 3 つの手順で実行する非常にハックな方法を次に示します。

  1. メソッドをインターフェイスに追加する
  2. メソッドを選択し、Refactor->Push Down... を呼び出します - メソッド宣言は、このインターフェイスを実装するすべてのクラスに表示されますが、少なくとも私のバージョンの IntelliJ IDEA (11.0.2) では実装がありませんvoid doSomething();。この定義を選択し、プロジェクト全体の検索と置換を実行して、この文字列をデフォルトの実装に置き換えます。たとえば、

    @Override void doSomething() {}

  3. メソッドをインターフェイスに再度追加します。

于 2012-05-01T16:02:29.780 に答える