假设我有一个接口 IPerson,它公开了另一个接口 ICar 的集合。ICar 由 Car 类实现,IPerson 由 Person 类实现。我希望 Person 可以公开 Car 的集合,而不是 ICar 的集合,但是如果不更改 IPerson 接口,这似乎是不可能的。
还有其他解决方案吗?我想让 IPerson 公开 ICar 的集合,但我还需要一个实现 IPerson 的类并公开 Car 的集合。
谢谢
假设我有一个接口 IPerson,它公开了另一个接口 ICar 的集合。ICar 由 Car 类实现,IPerson 由 Person 类实现。我希望 Person 可以公开 Car 的集合,而不是 ICar 的集合,但是如果不更改 IPerson 接口,这似乎是不可能的。
还有其他解决方案吗?我想让 IPerson 公开 ICar 的集合,但我还需要一个实现 IPerson 的类并公开 Car 的集合。
谢谢
我不知道这个解决方案是否符合您的需求,但是根据您使用的语言,您可以使用通用解决方案来实现这种行为。
例如在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>
。
如果我理解正确,您可以将 ICar 类型的集合添加到您的 Person 类中。因为 ICar 或 Car 的集合(几乎)是同一件事。
在我看来,这是不可能的。
如果 IPerson 有一组 ICar,那么您的 Person 类也需要接受任何 ICar,而不仅仅是您的具体Car类。
这当然是假设 IPerson 的用户被允许添加 ICar 实例。如果集合是只读的,那么理论上这可能是可能的,但大多数语言都不允许这样做(例如 C# 不允许)。