2012-08-06 134 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>