Questions tagged «generics»

泛型是在多种语言中发现的参数多态形式,包括.NET语言,Java,Swift和Rust。




8
Java泛型T与对象
我想知道以下两个方法声明之间有什么区别: public Object doSomething(Object obj) {....} public <T> T doSomething(T t) {....} 有什么可以/可以做的,而不是另一种?我在本网站的其他地方找不到这个问题。
127 java  generics 

5
为什么Go中没有泛型?
免责声明:我现在只和Go玩了一天,所以我很有可能错过了很多。 有谁知道为什么Go中没有对泛型/模板/ whatsInAName的真正支持?因此,有一个通用的map,但这是由编译器提供的,而Go程序员不能编写自己的实现。关于如何使Go尽可能正交的所有讨论,为什么我可以使用通用类型而不创建新类型? 尤其是在函数式编程方面,有lambda甚至闭包,但是在缺少泛型的静态类型系统中,我该如何编写泛型高阶函数,如filter(predicate, list)?好的,可以通过interface{}牺牲类型安全性来完成链接列表等。 由于在SO / Google上进行的快速搜索没有发现任何见解,因此,仿制药(如果有的话)似乎会在事后添加到Go中。我相信Thompson会比Java员工做得更好,但是为什么要排除泛型呢?还是他们已经计划并且尚未实施?

3
协议不符合自身?
为什么此Swift代码无法编译? protocol P { } struct S: P { } let arr:[P] = [ S() ] extension Array where Element : P { func test<T>() -> [T] { return [] } } let result : [S] = arr.test() 编译器说:“类型P不符合协议P”(或在Swift的更高版本中,“不支持将'P'用作符合协议'P'的具体类型”。) 为什么不?某种程度上,这感觉就像是语言上的一个漏洞。我意识到问题源于将数组声明arr为协议类型的数组,但这是不合理的事情吗?我认为协议确实可以帮助提供类型分层结构之类的结构吗?

5
Java(带有多个字符)的通用类型参数命名约定?
在我写的某些界面中,我想使用不止一个字符来命名通用类型参数,以使代码更具可读性。 就像是.... Map<Key,Value> 代替这个... Map<K,V> 但是当涉及到方法时,类型参数看起来像java类,这也很令人困惑。 public void put(Key key, Value value) 这似乎是键和值是类。我发现或想到了一些符号,但没有什么比Sun的约定或最佳常规更好。 我猜或发现的替代方案... Map<KEY,VALUE> Map<TKey,TValue>

6
如何实现IEnumerable <T>
我知道如何实现非通用IEnumerable,如下所示: using System; using System.Collections; namespace ConsoleApplication33 { class Program { static void Main(string[] args) { MyObjects myObjects = new MyObjects(); myObjects[0] = new MyObject() { Foo = "Hello", Bar = 1 }; myObjects[1] = new MyObject() { Foo = "World", Bar = 2 }; foreach (MyObject x in myObjects) …
124 c#  .net  generics 

2
“ Protocol…只能用作通用约束,因为它具有Self或关联的类型要求”是什么意思?
我正在尝试创建一个字典(实际上是HashSet),该字典以Swift中的自定义协议为键,但这给了我标题错误: 协议“ myProtocol”只能用作通用约束,因为它具有“自我”或相关类型要求 而且我不能做它的正面或反面。 protocol Observing: Hashable { } var observers = HashSet&lt;Observing&gt;()

8
何时使用通用方法以及何时使用通配符?
我正在从OracleDocGenericMethod中阅读有关泛型方法的信息。当比较指出何时使用通配符以及何时使用通用方法时,我对此感到非常困惑。引用文档。 interface Collection&lt;E&gt; { public boolean containsAll(Collection&lt;?&gt; c); public boolean addAll(Collection&lt;? extends E&gt; c); } 我们可以在这里使用通用方法: interface Collection&lt;E&gt; { public &lt;T&gt; boolean containsAll(Collection&lt;T&gt; c); public &lt;T extends E&gt; boolean addAll(Collection&lt;T&gt; c); // Hey, type variables can have bounds too! } […]这告诉我们类型参数正在用于多态。它的唯一作用是允许在不同的调用站点使用各种实际的参数类型。在这种情况下,应使用通配符。通配符旨在支持灵活的子类型化,这就是我们试图在此处表达的内容。 我们难道不认为像通配符一样(Collection&lt;? extends E&gt; c);也支持某种多态性吗?那么为什么在这种情况下通用方法的使用被认为不好呢? 它继续说, 通用方法允许使用类型参数来表示方法的一个或多个参数的类型和/或其返回类型之间的依赖性。如果没有这种依赖性,则不应使用通用方法。 这是什么意思? 他们举了例子 class …
122 java  generics  wildcard 

5
使用对象的字段作为通用词典密钥
如果我想使用对象作为a的键Dictionary,我需要重写哪些方法以使其以特定方式进行比较? 说我有一个具有属性的类: class Foo { public string Name { get; set; } public int FooID { get; set; } // elided } 我想创建一个: Dictionary&lt;Foo, List&lt;Stuff&gt;&gt; 我希望Foo具有相同对象的对象FooID被视为同一组。我需要在Foo该类中重写哪些方法? 总结一下:我想按Stuff对象将Foo对象分类为列表。Stuff对象将具有一个FooID将它们链接到其类别的链接。

11
为什么不能将float值用作模板参数?
当我尝试float用作模板参数时,编译器会为该代码哭泣,而int效果很好。 是因为我不能float用作模板参数? #include&lt;iostream&gt; using namespace std; template &lt;class T, T defaultValue&gt; class GenericClass { private: T value; public: GenericClass() { value = defaultValue; } T returnVal() { return value; } }; int main() { GenericClass &lt;int, 10&gt; gcInteger; GenericClass &lt; float, 4.6f&gt; gcFlaot; cout &lt;&lt; "\n sum of integer is …


4
从通用基类继承,应用约束并在C#中实现接口
这是一个语法问题。我有一个泛型类,它是从泛型基类继承的,并且将约束应用于类型参数之一。我还希望派生类实现一个接口。对于我的一生,我似乎无法找出正确的语法。 这就是我所拥有的: DerivedFoo&lt;T1,T2&gt; : ParentFoo&lt;T1, T2&gt; where T2 : IBar { ... } 我想到的第一件事是: DerivedFoo&lt;T1,T2&gt; : ParentFoo&lt;T1, T2&gt; where T2 : IBar, IFoo { ... } 但这是不正确的,因为这导致T2需要同时实现IBar和IFoo,而不是DerivedFoo来实现IFoo。 我尝试了一些谷歌搜索,冒号,分号等的使用,但是结果却很短。我确定答案很简单。

6
如果方法的返回类型为Void,我该返回什么?(不无效!)
由于在Java中使用了泛型,我最终不得不实现具有Voidas返回类型的函数: public Void doSomething() { //... } 并且编译器要求我返回一些东西。现在我只是返回null,但是我想知道这是否是一种好的编码实践…… 我问的是V oid,而不是V oid。类Void,不是保留关键字void。 我也试过Void.class,void,Void.TYPE,new Void(),没有回报可言,但都不会在所有的工作。(出于或多或少明显的原因)(有关详细信息,请参见此答案) 那么,如果函数的返回类型为,我应该返回Void什么呢? 该Void课程的一般用途是什么?
115 java  generics  void 

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.