Questions tagged «generics»

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


7
什么是“特殊班级”?
未能获得如下所示的内容后: public class Gen<T> where T : System.Array { } 与错误 约束不能是特殊类`System.Array' 我开始怀疑,到底是什么 “特殊班”? 当人们System.Enum在通用约束中指定时,人们似乎常常会遇到相同类型的错误。我得到了相同的结果System.Object,System.Delegate,System.MulticastDelegate和System.ValueType也。 还有更多吗?我在C#中找不到有关“特殊类”的任何信息。 此外,什么是如此特殊的课程,我们不能把它们作为一个泛型类型约束?

5
返回一个Void对象
Void如果不是原始类型,返回类型的正确方法是什么?例如。我目前使用null如下。 interface B<E>{ E method(); } class A implements B<Void>{ public Void method(){ // do something return null; } }

2
具有“任何泛型类型”定义的C#泛型“ where约束”?
让我举个例子: 我有一些通用的类/接口定义: interface IGenericCar< T > {...} 我还有另一个要与上面的类相关的类/接口,例如: interface IGarrage< TCar > : where TCar: IGenericCar< (**any type here**) > {...} 基本上,我希望我的通用IGarrage依赖IGenericCar,无论它是IGenericCar<int>还是IGenericCar<System.Color>,因为我对该类型没有任何依赖。

14
如何将List <T>初始化为给定的大小(而不是容量)?
.NET提供了一个性能几乎相同的通用列表容器(请参阅阵列性能与列表性能问题)。但是,它们在初始化方面有很大的不同。 数组很容易使用默认值初始化,并且根据定义,它们已经具有一定的大小: string[] Ar = new string[10]; 这样可以安全地分配随机项目,例如: Ar[5]="hello"; 与列表相比,事情更加棘手。我可以看到执行相同初始化的两种方法,这两种都不是您所说的优雅: List&lt;string&gt; L = new List&lt;string&gt;(10); for (int i=0;i&lt;10;i++) L.Add(null); 要么 string[] Ar = new string[10]; List&lt;string&gt; L = new List&lt;string&gt;(Ar); 什么是更清洁的方式? 编辑:到目前为止的答案涉及容量,这是除预填充列表以外的其他功能。例如,在刚创建的容量为10的列表上,一个不能执行L[2]="somevalue" 编辑2:人们想知道为什么我要以这种方式使用列表,因为这不是他们打算使用的方式。我可以看到两个原因: 令人信服的是,列表是“下一代”数组,几乎没有损失,却增加了灵活性。因此,默认情况下应使用它们。我指出,它们可能不那么容易初始化。 我目前正在编写的是一个基类,该基类在更大的框架中提供了默认功能。在我提供的默认功能中,列表的大小是高级已知的,因此我可以使用数组。但是,我想为任何基类提供动态扩展它的机会,因此我选择了一个列表。

2
Java未检查:varargs参数的未检查通用数组创建
我已将Netbeans设置为在我的Java代码中显示未经检查的警告,但是我无法理解以下几行的错误: private List&lt;String&gt; cocNumbers; private List&lt;String&gt; vatNumbers; private List&lt;String&gt; ibans; private List&lt;String&gt; banks; ... List&lt;List&lt;String&gt;&gt; combinations = Utils.createCombinations(cocNumbers, vatNumbers, ibans); 给出: [unchecked] unchecked generic array creation for varargs parameter of type List&lt;String&gt;[] 方法来源: /** * Returns a list of all possible combinations of the entered array of lists. * * …

4
Lambda表达式和通用方法
假设我有一个通用接口: interface MyComparable&lt;T extends Comparable&lt;T&gt;&gt; { public int compare(T obj1, T obj2); } 和方法sort: public static &lt;T extends Comparable&lt;T&gt;&gt; void sort(List&lt;T&gt; list, MyComparable&lt;T&gt; comp) { // sort the list } 我可以调用此方法并将lambda表达式作为参数传递: List&lt;String&gt; list = Arrays.asList("a", "b", "c"); sort(list, (a, b) -&gt; a.compareTo(b)); 那会很好的。 但是现在,如果我将接口设为非泛型,并且将方法设为泛型: interface MyComparable { public &lt;T extends …
111 java  generics  lambda  java-8 

7
一切可为空的C#通用类型约束
所以我有这个课: public class Foo&lt;T&gt; where T : ??? { private T item; public bool IsNull() { return item == null; } } 现在,我正在寻找一种类型约束,该约束允许我将所有内容都可以用作类型参数null。这意味着所有引用类型以及所有Nullable(T?)类型: Foo&lt;String&gt; ... = ... Foo&lt;int?&gt; ... = ... 应该是可能的。 使用class的类型约束,只允许我使用引用类型。 附加信息: 我正在编写管道和过滤器应用程序,并希望使用null引用作为传递到管道中的最后一项,以便每个过滤器都可以正常关闭,进行清理等。
111 c#  generics  nullable 

1
Java泛型中的“&”和“,”有什么区别?
在阅读有关泛型的Java官方教程时,我发现您可以T使用'and'运算符(&amp;)来限制类型参数(在这种情况下为)来扩展类和/或更多接口,如下所示: &lt;T extends MyClass &amp; Serializable&gt; 我取代了&amp;用,(错误和仍然有效,与未成年人的警告)。 我的问题是,两者之间是否有任何区别: &lt;T extends MyClass &amp; Serializable&gt; &lt;T extends MyClass , Serializable&gt; // here is with comma 和示例方法: static &lt;T extends MyClass &amp; Serializable&gt; ArrayList&lt;T&gt; fromArrayToCollection(T[] a) { ArrayList&lt;T&gt; arr = new ArrayList&lt;T&gt;(); for (T o : a) { arr.add(o); // Correct } return …
110 java  generics 


5
Kotlin:如何使用List演员表:未选中的Cast:kotlin.collections.List <Kotlin.Any?>到kotlin.colletions.List <Waypoint>
我想编写一个函数,该函数返回a中的每个项目List,而不是第一个或最后一个项目(通过点)。该函数获取通用List&lt;*&gt;输入。仅当列表的元素属于以下类型时,才应返回结果Waypoint: fun getViaPoints(list: List&lt;*&gt;): List&lt;Waypoint&gt;? { list.forEach { if(it !is Waypoint ) return null } val waypointList = list as? List&lt;Waypoint&gt; ?: return null return waypointList.filter{ waypointList.indexOf(it) != 0 &amp;&amp; waypointList.indexOf(it) != waypointList.lastIndex} } 当铸造List&lt;*&gt;来List&lt;Waypoint&gt;,我得到的警告: 未经检查的演员表:kotlin.collections.List到kotlin.colletions.List 我想不通其他方法来实现它。在没有此警告的情况下实现此功能的正确方法是什么?
108 list  generics  casting  kotlin 


8
在泛型类型参数上调用静态方法
我希望这样做,但是在C#中似乎是非法的: public Collection MethodThatFetchesSomething&lt;T&gt;() where T : SomeBaseClass { return T.StaticMethodOnSomeBaseClassThatReturnsCollection(); } 我收到一个编译时错误:“'T'是一个'类型参数',在给定的上下文中无效。” 给定通用类型参数,如何在通用类上调用静态方法?给定约束,静态方法必须可用。
107 c#  generics 

8
Java Class.cast()与强制转换运算符
在我的C ++时代里,学习过C风格的强制转换运算符的弊端后,我最初很高兴地发现Java 5中java.lang.Class已经获得了一种cast方法。 我以为最终我们有了一种面向对象的处理铸造的方法。 事实证明Class.cast与static_castC ++不同。更像是reinterpret_cast。它不会在预期的地方生成编译错误,而是会推迟到运行时。这是一个演示不同行为的简单测试用例。 package test; import static org.junit.Assert.assertTrue; import org.junit.Test; public class TestCast { static final class Foo { } static class Bar { } static final class BarSubclass extends Bar { } @Test public void test ( ) { final Foo foo = new Foo( ); …

3
Jackson和泛型参考
我想将jackson json库用于通用方法,如下所示: public MyRequest&lt;T&gt; tester() { TypeReference&lt;MyWrapper&lt;T&gt;&gt; typeRef = new TypeReference&lt;MyWrapper&lt;T&gt;&gt;(); MyWrapper&lt;T&gt; requestWrapper = (MyWrapper&lt;T&gt;) JsonConverter.fromJson(jsonRequest, typeRef); return requestWrapper.getRequest(); } ... public class MyWrapper&lt;T&gt; { private MyRequest&lt;T&gt; request; public MyRequest&lt;T&gt; getRequest() { return request; } public void setRequest(MyRequest&lt;T&gt; request) { this.request = request; } } public class MyRequest{ private List&lt;T&gt; …
107 java  json  generics  jackson 

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.