1

別のインターフェイスICarのコレクションを公開するインターフェイスIPersonがあるとします。ICarはCarクラスによって実装され、IPersonはPersonクラスによって実装されます。PersonがICarではなくCarのコレクションを公開できるようにしたいと思いますが、これはIPersonインターフェイスを変更しないと不可能と思われます。

他に解決策はありますか?IPersonにICarのコレクションを公開してもらいたいのですが、IPersonを実装し、Carのコレクションを公開するクラスも必要です。

ありがとう

4

3 に答える 3

1

このソリューションがニーズに合うかどうかはわかりませんが、使用している言語によっては、汎用ソリューションを使用してこの種の動作を実現できます。

たとえば、ジャバで

interface IPerson<T extends ICar> {

    public T[] getCars();

   // ...
}

Tこれにより、ジェネリック型が を実装する必要があることが保証ICarされます。Person

Class Person implements IPerson<Car> {

   Car[] cars;

   public Car[] getCars() {
        return cars;
   }

   // ...
}

残念ながら、IPersonsこれは ではなく.IPersonIPerson<Car>

于 2012-08-06T12:24:40.300 に答える
0

私の理解が正しければ、ICar 型のコレクションを Person クラスに追加するだけです。ICar または Car のコレクションは (ほぼ) 同じものだからです。

于 2012-08-06T12:15:31.547 に答える
0

私の意見では、これは不可能です。

IPerson が ICar のコレクションを持っている場合、Person クラスは具体的なCarクラスだけでなく、すべての ICar を受け入れる必要があります。

これはもちろん、IPerson のユーザーが ICar インスタンスの追加を許可されていることを前提としています。コレクションが読み取り専用の場合、理論上は可能かもしれませんが、ほとんどの言語では許可されません (たとえば、C# では許可されません)。

于 2012-08-06T12:18:43.490 に答える