gpt4 book ai didi

c# - 从抽象集合中生成抽象集合

转载 作者:搜寻专家 更新时间:2023-11-01 01:46:32 25 4
gpt4 key购买 nike

这个问题困扰了我一段时间。抽象地说,无论使用哪种语言,通常都会有这样的情况:

Collection method(Collection c) {
// select some elements from c based on some filter
// and return a new collection
}

现在,Collection 在这种情况下是一些具有多个实现的抽象类(比如 C# 中的 IList 或 Java 中的 List)。我一直想知道生成抽象集合的正确程序到底是什么?

是否可以在方法内部创建一个具体的集合并返回它?喜欢:

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;
}

出于某种原因,这对我来说似乎不是很“优雅”。我将不胜感激对此事的一些见解。

最佳答案

(以 Java 为例)。您返回 Collection(接口(interface))而不是具体类型(例如 ArrayList)的原因是您告诉用户他们不应该关心正在使用的实际具体类型是什么。这让您可以自由地为您的库/API 选择合适的类型。

如果您要强制执行特定的具体类,那么您应该返回该具体类,而不是接口(interface)。

因此,他们不应将您的返回类型强制转换为 Collection 以外的任何其他类型。看 When should I return the Interface and when the concrete class? .

关于c# - 从抽象集合中生成抽象集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8325993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com