2012-08-06 105 views
1

比方说,我有一个接口IPerson公开另一个接口ICar的集合。 ICar由Car类实现,而IPerson由Person类实现。我希望那个人可以公开Car的集合,而不是ICar,但是如果不更改IPerson接口,这似乎不可能。实现与接口集合的接口

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

谢谢

+0

我想问的是:当你不想编写接口(Car)时,为什么你想要编写接口(IPerson)?你会有几个IPerson和ICar的实现吗? – Augusto 2012-08-06 12:15:16

回答

0

如果我理解正确,你可以添加一个ICar类型的集合到你的Person类。因为ICar或Car的集合是(几乎)相同的东西。

0

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

如果IPerson拥有ICars集合,那么您的Person类还需要接受任何ICar,而不仅仅是您的具体的Car类。

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

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>