Questions tagged «generics»

元技术,允许对运行时进行可靠类型的设置。

5
C#中泛型的良好命名约定是什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我决定在这里问这个问题,而不是在堆栈溢出时问这个问题,因为它相当主观。 在C#中,通常我会看到名称很差的泛型类型。具体来说,“ T”是常用的,但其本身并不是有意义的名称。例如: class Fruit<T> { T fruit; } 虽然这是典型的方法,但有人会反对吗?如果是这样,那么在C#泛型函数和类的上下文中,泛型的合理命名约定是什么? 在我之前的示例中,让我们假设泛型类型T必须始终是水果的类型,例如Apple或Orange。该类型T需要使它很明显地表明它是水果的类型,所以也许更好的名称是FruitType,所以我们最终得到: class Fruit<FruitType> { FruitType fruit; } 这只是为了给大家我正在寻找的想法。这个问题可以接受的“经验法则”是什么?
16 c#  naming  generics 

3
使用接口而不是一般约束类型的原因是什么
在支持通用类型参数(也称为类模板和参数多态性,尽管每个名称当然都带有不同含义)的面向对象的语言中,通常可以在类型参数上指定类型约束,以便将其约束从另一种类型。例如,这是C#中的语法: //for classes: class ExampleClass<T> where T : I1 { } //for methods: S ExampleMethod<S>(S value) where S : I2 { ... } 在那些接口所约束的类型上使用实际接口类型的原因是什么?例如,进行方法签名的原因是什么I2 ExampleMethod(I2 value)?

3
为什么我们最好使用一流的收藏?
根据The ThoughtWorks Anthology中Jeff Bay (RTF)的对象健美操规则第4条规则,建议一个人应该“ 使用一流的收藏集 ”。 规则4:一流的收藏 该规则的应用很简单:任何包含集合的类都不应包含其他成员变量。每个集合都包装在自己的类中,因此与集合相关的行为现在有了归属。您可能会发现过滤器成为此新类的一部分。同样,您的新类可以处理诸如将两个组连接在一起或将规则应用于该组的每个元素的活动。 从中我可以理解的是,我们应该使用一个单独的类来包装该集合,并使用添加,删除该集合的数据的方法。 并且我们需要它,以便我们确定什么数据类型进入集合,什么结果出来。 如果我们使用通用集合(在适用的语言中),是否需要遵循此规则? 如果我没有重要意义,请澄清。

2
为什么要使用具有类型约束的泛型方法而不是类型本身?
在另一个StackExchange问​​题中,我注意到有人在使用此原型: void DoSomething<T>(T arg) where T: SomeSpecificReferenceType { //Code.... } 请记住,只有一个类型约束(SomeSpecificReferenceType),这样写而不是简单地有什么区别和好处? void DoSomething(SomeSpecificReferenceType arg) { //Code.... } 在这两种情况下,arg都将进行编译时类型检查。在这两种情况下,方法的主体都可以安全地依赖arg编译时已知的特定类型的知识(或作为其后代)。 这是开发人员在学习普通继承之前热衷于泛型的一种情况吗?还是有一个合理的理由解释为什么这样写方法签名?
14 c#  .net  generics 

4
如果我的IDE非常聪明,为什么我需要强制转换“ clone()”?
我在输入代码时,我的IDE(NetBeans)类型检查我Collections。但是,为什么我必须转换返回的对象Object.clone()?没关系 无害无犯规。但是我还是不明白。 是否在没有强制转换的情况下进行类型检查,Object.clone()否则无法返回的对象?该仿制药框架让我觉得IDE可以检查类型的“的右侧的对象引用= ”标记而无需进行转换,而我打字?我不明白 附录 我的用例只是我有一个私有Calendar字段pubdate。我打算写: Calendar getPubdate() { return pubdate; } 但是存在调用者可以修改我的pubdate的风险,因此我返回了一个副本: Calendar getPubdate() { return (Calendar) pubdate.clone(); } 然后,我想知道为什么我需要铸造pubdate.clone()。方法签名在那里具有类型。NetBeans应该能够弄清楚这一点。和NetBeans的似乎在做关于类似的东西Collections。

1
为什么需要更高的种类?
一些语言允许带有类型参数的类和函数(例如,List<T>其中T可能是任意类型)。例如,您可以具有以下功能: List<S> Function<S, T>(List<T> list) 但是,某些语言允许将此概念扩展到更高一级,从而使您可以使用带有签名的功能: K<S> Function<K<_>, S, T>(K<T> arg) 其中K<_>本身是List<_>带有类型参数的类型。这种“部分类型”被称为类型构造函数。 我的问题是,为什么需要这种能力?之类的类型是有意义的,List<T>因为所有类型List<T>几乎都完全相同,但是所有类型K<_>可以完全不同。你可以有一个Option<_>和List<_>具有完全没有常见的功能。

1
Scala作为通用编程语言
在Garcia等人的论文“针对通用编程的语言支持的扩展比较研究”中。给出了通用编程的编程语言功能的有趣比较: 简要解释术语: 任何人都可以在此框架内测试Scala对通用编程的支持吗?即,如果可能的话,在第一张表中添加一列,并附上说明。

7
何时在接口设计中使用泛型
我有一些接口,希望将来由第三方实现,并且自己提供一个基本实现。我将仅使用几个示例。 目前,它们被定义为 项目: public interface Item { String getId(); String getName(); } ItemStack: public interface ItemStackFactory { ItemStack createItemStack(Item item, int quantity); } ItemStackContainer: public interface ItemStackContainer { default void add(ItemStack stack) { add(stack, 1); } void add(ItemStack stack, int quantity); } 现在,Item和ItemStackFactory我完全可以预见到一些第三方的需要,以在将来扩展。ItemStackContainer将来也可以扩展,但不能以我无法预见的方式扩展到提供的默认实现之外。 现在,我正在尝试使此库尽可能强大。这仍处于早期阶段(pre-pre-alpha),因此这可能是过度设计(YAGNI)的行为。这是使用泛型的合适地方吗? public interface ItemStack<T extends Item> { …
11 java  generics 

3
C#中的各种集合通用接口之间的区别
我已经从事Windows的C#和ASP.net MVC开发工作了一段时间。但是我在一些方面仍然不清楚。我试图了解使用和互换相似种类的通用集合接口之间的基本区别和性能问题。 之间有什么根本区别IEnumerable<T>,ICollection<T>,List<T>(Class)? 我似乎在使用和交换它们时在我的应用程序中没有发现任何问题。另外,还有其他类似的通用集合可以与这三个集合互换吗?

3
通用编程,在工业中使用的频率
目前,我在学术环境中进行编程,因此我可以使用任何我想使用的东西。我在使用Boost图形库做一些事情,并且想知道是否值得花更多的精力来更深入地了解GP。 我很好奇-通用编程(GP)在行业中使用率很高吗?我的猜测是,大多数程序员更喜欢OOP或使用不强调或不支持GP的语言,因此,除了在C ++中调用STL数据结构/函数外,我的印象是GP并不是经常使用在实践中。但是,由于目前不在行业内,因此很高兴听到从业者的来信。 (在撰写本文时,我看到通用编程甚至不是有效的标签!)

4
在Java中实现多个通用接口
我需要一个接口来确保我可以使用某种方法,包括特定的签名。到目前为止,他就是我所拥有的: public interface Mappable<M> { M mapTo(M mappableEntity); } 当一个类应该可映射到多个其他实体时,就会出现问题。理想的情况是这样(不是java): public class Something implements Mappable<A>, Mappable<B> { public A mapTo(A someObject) {...} public B mapTo(B someOtherObject) {...} } 什么是最好的方式来实现这种剩余的“通用”?
10 java  generics 


1
用于推断类型参数的类型参数的技术名称?
设置:假设我们有一个名为type的类型Iterator,该类型具有type参数Element: interface Iterator<Element> {} 然后我们有一个接口Iterable,该接口具有一个将返回的方法Iterator。 // T has an upper bound of Iterator interface Iterable<T: Iterator> { getIterator(): T } Iterator泛型的问题是我们必须为其提供类型参数。 解决此问题的一种方法是“推断”迭代器的类型。以下伪代码表达了这样的想法:存在一个类型变量Element,该类型变量被推断为Iterator: interface <Element> Iterable<T: Iterator<Element>> { getIterator(): T } 然后我们在这样的地方使用它: class Vec<Element> implements Iterable<VecIterator<Element>> {/*...*/} 这个定义在其定义中Iterable没有使用Element任何其他地方,但在我的实际用例中却使用了。使用的某些函数Iterable还需要能够约束其参数以接受Iterables,该s仅返回某些迭代器,例如双向迭代器,这就是为什么返回的迭代器被参数化而不是元素类型的原因。 问题: 这些推断的类型变量是否有确定的名称?整个技术呢?由于不知道特定的术语,因此很难在野外搜索此示例或了解特定于语言的功能。 并非所有具有泛型的语言都具有此技术;这些语言中有类似技术的名称吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.