此问题一直在困扰着我。抽象地讲,无论语言,常常出现的情况下,当你想有这样的方法:从抽象集合中产生抽象集合
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