Questions tagged «generics»

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

5
?的可空类型问题:条件运算符
有人可以解释为什么这在C#.NET 2.0中有效: Nullable<DateTime> foo; if (true) foo = null; else foo = new DateTime(0); ...但这不是: Nullable<DateTime> foo; foo = true ? null : new DateTime(0); 后一种形式给我带来了一个编译错误“无法确定条件表达式的类型,因为'<null>'和'System.DateTime'之间没有隐式转换。” 不是说我不能使用前一种样式,而是第二种样式与我的其余代码更加一致。


8
是否有可能解决“为varargs参数创建T的通用数组”的编译器警告?
这是所讨论代码的简化版本,一个泛型类使用另一个具有泛型类型参数的类,并且需要将其中一个泛型类型传递给具有varargs参数的方法: class Assembler<X, Y> { void assemble(X container, Y... args) { ... } } class Component<T> { void useAssembler(T something) { Assembler<String, T> assembler = new Assembler<String, T>(); //generates warning: // Type safety : A generic array of T is // created for a varargs parameter assembler.assemble("hello", something); } } …
153 java  generics 

3
C#-一个列表中有多个泛型类型
这可能是不可能的,但是我有这个课: public class Metadata<DataType> where DataType : struct { private DataType mDataType; } 还有更多,但让我们保持简单。泛型类型(DataType)受where语句限制为值类型。我要做的是列出这些不同类型(DataType)的元数据对象。如: List<Metadata> metadataObjects; metadataObjects.Add(new Metadata<int>()); metadataObjects.Add(new Metadata<bool>()); metadataObjects.Add(new Metadata<double>()); 这有可能吗?
152 c#  generics 

6
如何添加到列表<?扩展Number>数据结构?
我有一个这样声明的清单: List&lt;? extends Number&gt; foo3 = new ArrayList&lt;Integer&gt;(); 我试图将3添加到foo3中。但是我收到这样的错误消息: The method add(capture#1-of ? extends Number) in the type List&lt;capture#1-of ? extends Number&gt; is not applicable for the arguments (ExtendsNumber)
152 java  generics 

7
Java枚举定义
我以为我很了解Java泛型,但是随后在java.lang.Enum中遇到了以下内容: class Enum&lt;E extends Enum&lt;E&gt;&gt; 有人可以解释如何解释此类型参数吗?奖励积分,用于提供其他示例,说明可以使用类似类型的参数。
151 java  generics  enums  crtp 

3
C#中的Java Map等效项
我正在尝试使用选择的键来保存集合中的项目列表。在Java中,我将仅使用Map,如下所示: class Test { Map&lt;Integer,String&gt; entities; public String getEntity(Integer code) { return this.entities.get(code); } } 在C#中有等效的方法吗? System.Collections.Generic.Hashset不使用哈希并且我不能定义自定义类型键 System.Collections.Hashtable不是泛型类 System.Collections.Generic.Dictionary没有get(Key)方法
150 c#  java  generics  collections 

7
为什么Java枚举文字不能具有通用类型参数?
Java枚举很棒。泛型也是如此。当然,由于类型擦除,我们都知道后者的局限性。但是有一件事我不理解,为什么我不能创建这样的枚举: public enum MyEnum&lt;T&gt; { LITERAL1&lt;String&gt;, LITERAL2&lt;Integer&gt;, LITERAL3&lt;Object&gt;; } 这样,该通用类型参数&lt;T&gt;又可以在各个地方使用。想象一下方法的通用类型参数: public &lt;T&gt; T getValue(MyEnum&lt;T&gt; param); 甚至在枚举类本身中: public T convert(Object o); 更具体的例子#1 由于上面的示例对于某些人来说似乎太抽象了,因此下面是一个更现实的示例,说明了为什么要执行此操作。在此示例中,我想使用 枚举,因为这样我就可以枚举一组有限的属性键 泛型,因为这样我就可以具有方法级的类型安全性来存储属性 public interface MyProperties { public &lt;T&gt; void put(MyEnum&lt;T&gt; key, T value); public &lt;T&gt; T get(MyEnum&lt;T&gt; key); } 更具体的例子#2 我有一个数据类型的枚举: public interface DataType&lt;T&gt; {} public enum SQLDataType&lt;T&gt; …
148 java  generics  enums 

4
该示例为何不编译,又是(协方,对方和内部)方差如何工作?
接着这个问题,有人可以在Scala中解释以下内容: class Slot[+T] (var some: T) { // DOES NOT COMPILE // "COVARIANT parameter in CONTRAVARIANT position" } 我明白之间的区别+T,并T在类型声明(它编译如果我使用T)。但随后一个人如何真正写一个类,这是在其类型参数的协变而不诉诸创造的东西unparametrized?如何确保只能使用实例创建以下内容T? class Slot[+T] (var some: Object){ def get() = { some.asInstanceOf[T] } } 编辑 -现在将其归结为以下内容: abstract class _Slot[+T, V &lt;: T] (var some: V) { def getT() = { some } } …

9
<和之间有什么区别?超级E>和<?扩展E>?
&lt;? super E&gt;和之间有什么区别&lt;? extends E&gt;? 例如,当您查看类时java.util.concurrent.LinkedBlockingQueue,构造函数具有以下签名: public LinkedBlockingQueue(Collection&lt;? extends E&gt; c) 对于方法之一: public int drainTo(Collection&lt;? super E&gt; c)
147 java  generics 

12
杰克逊-使用泛型类反序列化
我有一个json字符串,应该将其反序列化为以下类 class Data &lt;T&gt; { int found; Class&lt;T&gt; hits } 我该怎么做?这是通常的方式 mapper.readValue(jsonString, Data.class); 但是我怎么提到T代表什么呢?
147 java  json  generics  jackson 

5
如何将类类型作为函数参数传递
我有一个通用函数,该函数调用Web服务并将JSON响应序列化回一个对象。 class func invokeService&lt;T&gt;(service: String, withParams params: Dictionary&lt;String, String&gt;, returningClass: AnyClass, completionHandler handler: ((T) -&gt; ())) { /* Construct the URL, call the service and parse the response */ } 我要完成的是等效于此Java代码 public &lt;T&gt; T invokeService(final String serviceURLSuffix, final Map&lt;String, String&gt; params, final Class&lt;T&gt; classTypeToReturn) { } 我要完成的方法签名正确吗? 更具体地说,AnyClass将参数类型指定为正确的做法是正确的吗? 调用该方法时,我将其MyObject.self作为returningClass值传递,但是出现编译错误“无法将表达式的类型'()'转换为'String'类型” CastDAO.invokeService("test", …

5
Java为什么不允许Throwable的通用子类?
根据Java语言分隔,第3版: 如果泛型类是的直接子类或间接子类,则是编译时错误Throwable。 我想理解为什么做出这个决定。通用异常有什么问题? (据我所知,泛型只是编译时的语法糖,Object无论如何它们都将转换为.class文件,因此有效地声明泛型类就好像其中的所有内容都是Object。。如果我错了,请更正我)

6
类型“ T”的值不能转换为
这可能是一个新手问题,但是Google令人惊讶地没有提供答案。 我有这种相当人为的方法 T HowToCast&lt;T&gt;(T t) { if (typeof(T) == typeof(string)) { T newT1 = "some text"; T newT2 = (string)t; } return t; } 来自C ++背景,我期望它能起作用。但是,对于上述两个分配,它都无法通过“不能将类型'T'隐式转换为字符串”和“不能将类型'T'转换为字符串”进行编译。 我在概念上做错了或者语法错误。请帮助我解决这一问题。 谢谢!
146 c#  .net  generics  casting 


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.