3

一度しか実装できないインターフェースを開発する必要があります。他のクラスが同じプロジェクトに同じインターフェイスを実装しようとすると、許可されたり、エラーが発生したりしないようにする必要があります。

interface A {
   void someMethod();
}

class B implements A {
    void someMethod() {
        // implementation here
    }
}

ここで、他のクラスを制限してインターフェイスAを実装したいと思います

class c implements A { //this  should not allowed in this project
}

この種のインターフェースを開発することは可能ですか?誰かが提案できますか、これを達成するためにどのようにすればよいですか?

4

5 に答える 5

3

簡単な答えです。インターフェースがパブリック/パッケージで保護されている場合は不可能です。

于 2012-09-13T05:35:57.160 に答える
2

これは、インターフェースの目的を無効にします。実装が1つしかない場合は、具体的である可能性もあります。

インターフェイスは、複数のクラスによって実装されることを目的としています。これにより、実装の詳細を気にすることなく、実装を切り替えることができます。たとえば、インターフェイスの最も一般的な使用法は、コレクションフレームワーク、特に、、、ListおよびSetですMap

// Hides the implementation details of ArrayList within a List variable
List<String> strs = new ArrayList<String>();
// Hides the implementation details of LinkedList within the same List variable
strs = new LinkedList<String>();
// All code using strs is agnostic to what kind of list it is (mostly)
strs.add("Hello, Dolly");
System.out.println(strs.get(0));

インターフェイスは主に、カプセル化ポリモーフィズムという2つのOOP概念を具体化します。インターフェイスを使用してこれら2つのことのいずれかを実行する予定がない場合は、インターフェイスを使用しないでください。具象(非抽象)クラスを使用するだけです。この時点でインターフェースを使用するのはやり過ぎです。

Proxy私が考えることができるこの規則の唯一の例外は、Javaのクラスを使用したい場合です。その場合にのみ、1:1のインターフェース:クラス比が受け入れられます。これは、Proxyインスタンスで実装をラップするためのインターフェースが必要だからです。

于 2012-09-13T05:46:22.080 に答える
1

デザインが間違っているようで、インターフェースは実際にはの一部である必要がありますclass B

インターフェイスのポイントは、ここで回避しようとしている同じメソッドセットのさまざまな実装を可能にすることです。

于 2012-09-13T05:43:36.733 に答える
0

同じパッケージにinterface A入れてください。class B

実装してはならないすべてのクラスはA、このパッケージの外にある必要があります。

于 2012-09-13T05:39:54.387 に答える
0

の実装について知る唯一のグローバルな方法Aは、それらが自分自身をあなたに登録するかどうかです。これは無意味です。あなたはそれを忘れることができます。


使用するすべてのインスタンスにA、以外の共通のクラスがあるObject.classか、それらのクラスが同じであるか、またはそれらのクラスがである必要があるかどうかはわかりませんB.class

何を強制したいかに関係なく、合格したインスタンスで望ましくない状況をテストする必要があります。とにかく作業しないAインスタンスとの取引はありません。A

または、渡されたインスタンスごとにA、新しいを作成しB、渡されたから必要なデータを挿入することもできますA


ただし、最初に、なぜこれが必要なのかを考える必要があります。の実装が異なる場合は、実際には問題にならない可能性がありAます。

于 2016-06-01T14:58:58.757 に答える