比方說,我有一個接口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