0

CSV ファイル、SQL テーブルなどのさまざまな種類の入力ソースを処理するためのインターフェイスを定義しているため、データを簡単にコピーできます。これを達成するために、私はリーダー用のインターフェースとライター用のインターフェースを用意しています。これらには共通の属性がいくつかあるため、 の抽象インターフェイスを定義したいと思いましたICommonContainer

共通コンテナ インターフェイスはサブセットを定義するだけなので不完全です。そのため、abstract を追加すると、クラスに適用されたときにインスタンス化できないはずだと考えましたが、そうです。

では、抽象クラスと同様に、インターフェイスを不完全として宣言する方法はありますか?

したがって、インターフェースは次のようになります。

public interface ICommonContainer
{
    public void foo();
};

public interface Reader extends ICommonContainer
{
    public data read();
};

public interface Writer extends ICommonContainer
{
    public void write(data objects);
};

リーダーとライターは完全であるべきですが、ベースはそうではありません。

4

5 に答える 5

2

なんてことはありませんAbstract interface。クラスをインスタンス化できないようにするために、クラスを抽象化します。また、本質的にインターフェイスはインスタンス化できないだけです。

問題に関する限り、クラスに任意の数のインターフェースを実装させることができます。あなたの場合、インターフェースは同じ継承階層の一部であるため、インターフェースとインターフェースの両方を実装する必要はありませBaseん。したがって、どちらかまたはインターフェースを実装させてください。ReaderWriterReaderWriter


一方、ICommonContainerインターフェイスのみを実装するクラスを非静的に作成する場合は、そのクラスを作成しabstractます。それで十分でしょう。

public abstract class SomeClass implements ICommonContainer {
    // Either define the method in interface or leave it.
}

上記の例のように、 yourSomeClassは抽象的に定義されているため、インスタンス化できません。

于 2013-06-27T13:37:19.290 に答える
1

インターフェイス パッケージを非公開にすることもできますが、それによって目的が達成される可能性がありますが、より大きな問題はその理由です。

Java ライブラリには、「不完全」なインターフェースが多数あります。または、それを説明するより良い方法は、それらが部分的に完成しているということです。それらの1つであるリスト。

リストは部分的に完成したと見なすことができます。これは通常、さらに何かが必要なためです。順序付け (ArrayList)、または高速挿入の保証 (LinkedList) など。具体的なクラスは、完全性を処理します。

あなたがやろうとしていることは、まともな設計原則に反します。インターフェイスをある程度のレベルに十分なものとして設計する必要があるため、この設計原則は貧弱であると考えています。リストの例を考えると、一部のクラスでは、反復可能なオブジェクトのコレクションがあることを知っていれば十分です。これにより、優れたインターフェイス設計が実現します。インターフェイスのユーザーは、そのような実装から疎結合されています。

于 2013-06-27T13:40:39.990 に答える
1

いいえ、インターフェイスの抽象を宣言することはできません。

また、インターフェイスを実装し、抽象的ではないクラス (パブリックの場合) が世界に存在するのを防ぐことはできません。

誰かが ICommonContainer だけを使用して完全なクラスを作成できれば、問題はないと思います。

于 2013-06-27T13:42:14.913 に答える
1

共通コンテナ インターフェイスはサブセットを定義するだけなので不完全です。そのため、abstract を追加すると、クラスに適用されたときにインスタンス化できないはずだと考えましたが、そうです。

いいえ、インターフェースをインスタンス化することはできません。

いいえ、一部のクラスがそのインターフェイスを実装するのを防ぐ方法はありません。

ReaderおよびWriter(適用された Java 命名規則を使用した例の名前)を実装するのはあなたの仕事であり、実装する必要はありませんBase

于 2013-06-27T13:37:56.560 に答える
0

読み取りに関係する「部分的な」インターフェイスと書き込みに関係する別のインターフェイス、および「欠落している」機能用の別のインターフェイスを使用できます。具象クラスの各ユーザーは、それを必要なインターフェイスにキャストします。

于 2013-06-27T13:42:56.973 に答える