比方说,我有一个接口IPerson公开另一个接口ICar的集合。 ICar由Car类实现,而IPerson由Person类实现。我希望那个人可以公开Car的集合,而不是ICar,但是如果不更改IPerson接口,这似乎不可能。实现与接口集合的接口
有没有其他解决方案?我想让IPerson公开一个ICar集合,但是我还需要一个实现IPerson的类并且暴露一个Car集合。
谢谢
比方说,我有一个接口IPerson公开另一个接口ICar的集合。 ICar由Car类实现,而IPerson由Person类实现。我希望那个人可以公开Car的集合,而不是ICar,但是如果不更改IPerson接口,这似乎不可能。实现与接口集合的接口
有没有其他解决方案?我想让IPerson公开一个ICar集合,但是我还需要一个实现IPerson的类并且暴露一个Car集合。
谢谢
如果我理解正确,你可以添加一个ICar类型的集合到你的Person类。因为ICar或Car的集合是(几乎)相同的东西。
在我看来,这是不可能的。
如果IPerson拥有ICars集合,那么您的Person类还需要接受任何ICar,而不仅仅是您的具体的Car类。
这当然假设允许IPerson的用户添加ICar实例。如果集合是只读的,那么在理论上这可能是可能的,但大多数语言不会允许它(例如C#不会)。
我不知道这个解决方案是否能满足您的需求,但是根据您使用的语言,您可以使用通用解决方案来实现这种行为。
例如在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>
。
我想问的是:当你不想编写接口(Car)时,为什么你想要编写接口(IPerson)?你会有几个IPerson和ICar的实现吗? – Augusto 2012-08-06 12:15:16