Questions tagged «generics»

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

7
在Swift中使用where子句扩展数组类型
我想使用Accelerate框架来扩展[Float]和[Double],但是每一个都需要不同的实现。 我尝试了明显的方法: extension Array<Float> { } 并得到这个错误: “必须在具有'where'子句指定约束的非专用泛型'Array'上声明受约束的扩展” 这样在Swift 2中扩展泛型类型是否可行? 我的代码现在按预期工作了。这是显示使用Accelerate框架求和的示例。 extension _ArrayType where Generator.Element == Float { func quickSum() -> Float { var result: Float = 0 if var x = self as? [Float] { vDSP_sve(&x, 1, &result, vDSP_Length(x.count)) } return result } } extension _ArrayType where Generator.Element == …

5
解释Collections。<String> emptyList()的语法
我只是研究了通用编程,List&lt;E&gt;接口和ArrayList,所以我可以理解下面的语句。 ArrayList&lt;String&gt; list = new ArrayList&lt;String&gt;(); 但是我不理解在浏览网络时看到的下一条语句。 List&lt;String&gt; list2 = Collections.&lt;String&gt;emptyList(); 什么Collections啊 为什么不是Collections&lt;E&gt;还是Collections&lt;String&gt;? 为什么&lt;String&gt;将方法名称放在前面emptyList? (emptyList&lt;String&gt;()对于Generic是否正确?) 该声明是什么意思?

7
Java抽象类使用泛型实现接口
我试图定义一个实现Comparable的抽象类。当我用以下定义定义类时: public abstract class MyClass implements Comparable &lt;MyClass&gt; 子类必须实现compareTo(MyClass object)。相反,我希望每个子类都实现compareTo(SubClass object),接受其自己类型的对象。当我尝试使用类似以下内容定义抽象类时: public abstract class MyClass implements Comparable &lt;? extends MyClass&gt; 它抱怨“一个超类型可能没有指定任何通配符。” 有解决方案吗?

3
如何从泛型类型参数获取`.class`属性?
该问题的可接受答案描述了如何T在Generic&lt;T&gt;类中创建的实例。这涉及将Class&lt;T&gt;参数传递给Generic构造函数并newInstance从中调用方法。 Generic&lt;Bar&gt;然后创建的新实例,并Bar.class传递参数。 如果新Generic类的泛型类型参数不是某个已知类,Bar但它本身是泛型类型参数,该怎么办?假设我还有其他班级Skeet&lt;J&gt;,我想Generic&lt;J&gt;从该班级内部创建一个新实例。然后,如果我尝试传递,则会J.class收到以下编译器错误: cannot select from a type variable. 有没有办法解决? 对我而言,触发错误的代码是: public class InputField&lt;W extends Component &amp; WidgetInterface&gt; extends InputFieldArray&lt;W&gt; { public InputField(String labelText) { super(new String[] {labelText}, W.class); } /* ... */ } public class InputFieldArray&lt;W extends Component &amp; WidgetInterface&gt; extends JPanel { /* ... */ public InputFieldArray(String[] labelText, …
70 java  generics 

3
_Generic在C11中的语法和示例用法
我听说C11添加了泛型。我已经用Google搜索了一下,看了一些文章,了解到有一个新的关键字(_Generic)等等。但我似乎无法掌握所有内容。 它类似于C#中的泛型或C ++中的模板吗?谁能给我关于C11泛型定义,其语法和简单示例用法示例的简短说明?
70 c  generics  c11 

8
如何让Java方法返回任何类型的通用列表?
我想写一个方法,可以返回java.util.List任何类型的a ,而无需进行类型转换: List&lt;User&gt; users = magicalListGetter(User.class); List&lt;Vehicle&gt; vehicles = magicalListGetter(Vehicle.class); List&lt;String&gt; strings = magicalListGetter(String.class); 方法签名是什么样的?可能是这样的: public List&lt;&lt;?&gt; ?&gt; magicalListGetter(Class&lt;?&gt; clazz) { List&lt;?&gt; list = doMagicalVooDooHere(); return list; }

6
Java泛型:多个泛型参数?
我想知道是否可以编写一个可以接受多种通用类型的函数,如下所示: public int void myfunction(Set&lt;T&gt; a, Set&lt;T&gt; b) { return 5; } Set&lt;Integer&gt; setA = new HashSet&lt;Integer&gt;(); Set&lt;String&gt; setB = new HashSet&lt;String&gt;(); int result = myfunction(setA, setB); 那行得通吗?每个参数中的泛型是否意味着每个参数必须具有与泛型相同的类型T?

6
Java泛型:泛型定义为仅返回类型
我正在查看GWT的一些GXT代码,并且遇到了泛型的这种用法,我在Java教程中找不到另一个示例。类名称是com.extjs.gxt.ui.client.data.BaseModelData您是否要查看所有代码。以下是重要部分: private RpcMap map; public &lt;X&gt; X get(String property) { if (allowNestedValues &amp;&amp; NestedModelUtil.isNestedProperty(property)) { return (X)NestedModelUtil.getNestedValue(this, property); } return map == null ? null : (X) map.get(property); } X在类中的其他地方或层次结构中的任何地方都没有定义,并且当我在eclipse中单击“转到声明”时,它只是转到&lt;X&gt;了公共方法签名中。 我尝试通过以下两个示例调用此方法,以了解发生了什么: public Date getExpiredate() { return get("expiredate"); } public String getSubject() { return get("subject"); } 它们编译并且不显示任何错误或警告。我认为至少我必须进行转换才能使其正常工作。 这是否意味着泛型允许一个魔术返回值,该返回值可以是任何值,并且会在运行时爆炸?这似乎与仿制药应该做的相反。谁能给我解释一下,并且可能给我链接一些说明得更好的文档?我已经阅读了Sun的23页关于泛型的pdf文件,每个返回值的示例都在类级别定义或在传入的参数之一中定义。
68 java  generics  java-5 

3
通用列表<T>作为方法的参数
我如何List&lt;T&gt;在方法上使用a作为参数,我尝试使用以下语法: void Export(List&lt;T&gt; data, params string[] parameters){ } 我收到编译错误: 找不到类型或名称空间名称“ T”(您是否缺少using指令或程序集引用?)
67 c#  generics  c#-3.0 

4
Java泛型-桥接方法?
与Java泛型相关的所谓“桥接方法”概念使我停下来思考一下。 顺便说一句,我只知道它发生在字节码级别,因此我们无法使用。 但是我很想知道Java编译器使用的“桥接方法”背后的概念。 幕后到底发生了什么,为什么要使用它? 一个例子的任何帮助将不胜感激。
67 java  generics 

6
用泛型装箱和拆箱
创建整数集合的.NET 1.0方法(例如)是: ArrayList list = new ArrayList(); list.Add(i); /* boxing */ int j = (int)list[0]; /* unboxing */ 使用此方法的代价是由于装箱和拆箱而导致缺乏类型安全性和性能。 .NET 2.0方法是使用泛型: List&lt;int&gt; list = new List&lt;int&gt;(); list.Add(i); int j = list[0]; 装箱的价格(据我了解)是需要在堆上创建一个对象,将分配给堆栈的整数复制到新对象,反之亦然。 泛型的使用如何克服这个问题?堆栈分配的整数是否保留在堆栈上并从堆中指向(我想不是这样,因为当超出范围时会发生什么)?似乎仍然需要将其复制到堆栈中的其他位置。 到底是怎么回事?
67 c#  .net  generics  boxing  unboxing 

4
为什么在编译时不检查lambda返回类型?
使用的方法引用具有返回类型Integer。但是String在下面的示例中,允许不兼容。 如何解决方法with声明以确保方法引用类型安全而无需手动强制转换? import java.util.function.Function; public class MinimalExample { static public class Builder&lt;T&gt; { final Class&lt;T&gt; clazz; Builder(Class&lt;T&gt; clazz) { this.clazz = clazz; } static &lt;T&gt; Builder&lt;T&gt; of(Class&lt;T&gt; clazz) { return new Builder&lt;T&gt;(clazz); } &lt;R&gt; Builder&lt;T&gt; with(Function&lt;T, R&gt; getter, R returnValue) { return null; //TODO } } static public interface MyInterface …

4
<和有什么区别?扩展Base>和<T扩展Base>?
在此示例中: import java.util.*; public class Example { static void doesntCompile(Map&lt;Integer, List&lt;? extends Number&gt;&gt; map) {} static &lt;T extends Number&gt; void compiles(Map&lt;Integer, List&lt;T&gt;&gt; map) {} static void function(List&lt;? extends Number&gt; outer) { doesntCompile(new HashMap&lt;Integer, List&lt;Integer&gt;&gt;()); compiles(new HashMap&lt;Integer, List&lt;Integer&gt;&gt;()); } } doesntCompile() 无法编译为: Example.java:9: error: incompatible types: HashMap&lt;Integer,List&lt;Integer&gt;&gt; cannot be converted to …

5
如何在C#中捕获通用异常的所有变体
我想捕获一个通用异常类的所有变体,我想知道是否有一种方法可以在没有多个catch块的情况下进行。例如说我有一个异常类: public class MyException&lt;T&gt; : Exception { public string MyProperty { get; } public MyException(T prop) : base(prop.ToString()) { MyProperty = prop?.ToString(); } } 和两个派生类: public class MyDerivedStringException : MyException&lt;string&gt; { public MyDerivedStringException(string prop) : base(prop) { } } public class MyDerivedIntException : MyException&lt;int&gt; { public MyDerivedIntException(int prop) : base(prop) …
22 c#  generics  exception 

1
为什么类型参数比方法参数更强大
为什么是 public &lt;R, F extends Function&lt;T, R&gt;&gt; Builder&lt;T&gt; withX(F getter, R returnValue) {...} 然后更严格 public &lt;R&gt; Builder&lt;T&gt; with(Function&lt;T, R&gt; getter, R returnValue) {...} 这是为什么在编译时不检查lambda返回类型的后续操作。我发现使用withX()类似的方法 .withX(MyInterface::getLength, "I am not a Long") 产生所需的编译时错误: 类型BuilderExample.MyInterface中的getLength()类型很长,这与描述符的返回类型不兼容:字符串 而使用该方法with()则没有。 完整的例子: import java.util.function.Function; public class SO58376589 { public static class Builder&lt;T&gt; { public &lt;R, F extends Function&lt;T, …

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.