假设我有一个接口IPerson,它暴露了另一个接口ICar的集合。 ICar由Car类实现,IPerson由Person类实现。我希望那个人可以暴露一个Car的集合,而不是ICar,但是如果不改变IPerson界面,这似乎是不可能的。
还有其他解决方案吗?我想让IPerson公开一个ICar的集合,但我还需要一个实现IPerson的类,并暴露一个Car的集合。
谢谢
答案 0 :(得分: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>
。
答案 1 :(得分:0)
如果我理解正确,您只需将类型ICar的集合添加到Person类。因为ICar或Car的集合(ALMOST)是相同的。
答案 2 :(得分:0)
在我看来,这是不可能的。
如果IPerson有一系列ICars,那么你的Person类也需要接受任何ICar,而不仅仅是你的具体 Car 类。
这当然假设允许IPerson的用户添加ICar实例。如果集合是只读的,那么理论上这可能是可能的,但大多数语言都不允许它(例如C#不会)。