此問題一直在困擾着我。抽象地講,無論語言,常常出現的情況下,當你想有這樣的方法:從抽象集合中產生抽象集合
Collection method(Collection c) {
// select some elements from c based on some filter
// and return a new collection
}
現在,Collection
在這種情況下,一些抽象類(好比說在C#IList
或List
在Java中)與幾個實現。我一直在想,產生抽象集合的正確過程究竟是什麼?
可以在方法中創建一個具體的集合並返回它嗎?像:
Collection method(Collection c) {
Collection cc = new ConcreteCollection();
// select some elements from c based on some filter
return cc;
}
這當然穿的結果集合的約束,並會產生問題的情況下,出於某種原因,我們想要的方法的結果轉換爲不同的具體集合比內部使用的一個方法。
或者,使用反射來確定實際的具體的C型和創建類的實例:
Collection method(Collection c) {
Collection cc = c.getClass().newInstance();
// select some elements from c based on some filter
return cc;
}
出於某種原因,這似乎不是很「優雅」給我。我非常感謝在這個問題上的一些見解。
確實,我一直在問自己:「爲什麼你想把它轉換成別的東西?」。在這種情況下,似乎第一個版本應該沒問題。 – Tudor