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