0

こんにちは、特定のデザインを Java で実装しています。基本的に、ベースと呼ばれる抽象クラスがあり、ベースを拡張して別のパッケージからインターフェイスを実装する具象クラスがいくつかあります。各具象クラスは、異なるインターフェースを実装します。現在、これらのインターフェイスには、イベント ベースと非イベント ベースの両方のメソッド シグネチャが含まれています。ここでの私の質問は次のとおりです。非イベントベースのメソッドを具象クラスに実装することだけが期待されていますが、implements キーワード java により、基本的に null を返す自動生成されたメソッド本体を挿入する必要があります。後でこれらのイベント ベースのメソッドを実装する可能性がありますが、現時点ではそうではありません。これらのメソッドに実装が含まれていないことを API ユーザーに知らせる適切な方法は何でしょうか。これが私の考えです。

  1. 非推奨のキーワードを使用する
  2. 例外クラスを作成し、その例外をメソッド内でスローして、API ユーザーに処理させます。

既存のアーキテクチャを変更するオプションはありません。どんなアイデアでも本当に感謝しています。ありがとうございました。

4

5 に答える 5

0

「NotSupported」または「NotImplemented」例外の例外をスローする場合は、NotImplementedException (org.apache.commons) の例外を検討してください。
ただし、設計を再検討し、これを回避できるかどうかを確認することを再検討します。おそらく、常に実装されているメソッドを保持し、別のインターフェイスで拡張する別のインターフェイスを定義する必要があります (または、拡張機能のないインターフェイスを提供します)。常に実装するとは限らないメソッドについては、前のものに)。

于 2012-06-30T17:30:50.013 に答える
0

コンポーネントのユーザーがアクセスできるようにするすべてのメソッドをリストする独自のインターフェースを作成できます。これを使用する唯一のインターフェイスにすると、追加のパブリック メソッドは表示されなくなります。

于 2012-06-28T15:31:25.030 に答える
0

オプション (2) は適切ですが、インターフェイスに従っているため、未チェックの例外が必要になります。そして、メソッドを未実装として文書化します。

非推奨は履歴を意味します。つまり、機能しますが、使用しないでください。メソッドが機能しないことを明示的に述べているため、非推奨としてマークしても、使用が妨げられたり、メソッドが実装されていないことが示されたりすることはありません。

于 2012-06-28T15:32:15.623 に答える
0

Oracleによると、API を廃止する理由には次のものがあります。

  • 安全でない、バグがある、または非常に非効率的です
  • 将来のリリースでは廃止されます
  • 悪いコーディング慣行を助長する

どちらも実際にはあなたのケースに当てはまりません。

個人的には、標準ライブラリで既に提供されているUnsupportedOperationExceptionをスローすることを好みます。

要求された操作がサポートされていないことを示します。

私には、これはあなたが実際に望んでいることのように聞こえます。

于 2012-06-28T15:38:17.257 に答える
0

I would suggest use some mix bag of design patterns. That will help you solve this problem efficiently and make the code maintainable as well.

Based on my knowledge, you can use the Abstract Factory pattern here. See the design sketch below in the figure.

enter image description here

Method1 and method2 in subclass1 and subclass2 are the ones which are supposed to be exposed while method3 and method4 in subclass1 and subclass2 are the ones which we don't want to expose.

Create a Genericsubclass interface and create some methods in this interface depending upon the nature of methods you have in subclasses. For ex: i have create one method in this interface called nonEventbasedmethod1

Create a factory corresponding to every sub class and each factory will implement the GenericSubclass interface. Then implementation of nonEventbasedmethod1 method in subclass1Factory would be some thing like

nonEventbasedmethod1(){
    subclass1.method1();
}

and implementation of nonEventbasedmethod1 method in subclass2Factory would be some thing like

nonEventbasedmethod1(){
    subclass2.method3();
}

Then create a SubclassAbstract Factory which will return one of the subclass factories and then without worrying about which factory has been returned (that decision has already been taken in SubclassAbstractFactory before returning the appropriate factory) simply call the desired method from GenericSubclass interface and underneath one of the methods from the subclass1 or subclass2 will be invoked.

Hope this helps.

于 2012-06-28T16:41:52.693 に答える