1

假设我有一个接口 IPerson,它公开了另一个接口 ICar 的集合。ICar 由 Car 类实现,IPerson 由 Person 类实现。我希望 Person 可以公开 Car 的集合,而不是 ICar 的集合,但是如果不更改 IPerson 接口,这似乎是不可能的。

还有其他解决方案吗?我想让 IPerson 公开 ICar 的集合,但我还需要一个实现 IPerson 的类并公开 Car 的集合。

谢谢

4

3 回答 3

1

我不知道这个解决方案是否符合您的需求,但是根据您使用的语言,您可以使用通用解决方案来实现这种行为。

例如在java中

interface IPerson<T extends ICar> {

    public T[] getCars();

   // ...
}

这将确保泛型类型T必须实现ICar,然后在您的实现中Person您可以拥有

Class Person implements IPerson<Car> {

   Car[] cars;

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

   // ...
}

不幸的是,这将不允许您一起查看不同的IPersons集合,因为这不再是一个,IPerson而是一个IPerson<Car>

于 2012-08-06T12:24:40.300 回答
0

如果我理解正确,您可以将 ICar 类型的集合添加到您的 Person 类中。因为 ICar 或 Car 的集合(几乎)是同一件事。

于 2012-08-06T12:15:31.547 回答
0

在我看来,这是不可能的。

如果 IPerson 有一组 ICar,那么您的 Person 类也需要接受任何 ICar,而不仅仅是您的具体Car类。

这当然是假设 IPerson 的用户被允许添加 ICar 实例。如果集合是只读的,那么理论上这可能是可能的,但大多数语言都不允许这样做(例如 C# 不允许)。

于 2012-08-06T12:18:43.490 回答