问题标签 [bounded-wildcard]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java 泛型(通配符)
我对 Java 中的通用通配符有几个问题:
List<? extends T>
和 和有什么不一样List<? super T>
?什么是有界通配符,什么是无界通配符?
java - Java中的泛型,使用通配符
我有一个关于 Java 中的泛型的问题,即使用通配符。我有一个像这样的示例类 GenClass:
我有另一个简单的类:
我编写了以下测试类:
现在,如果我使用通配符并在测试类中这样写:
在:
编译器对这个新语句没有问题,但是,它抱怨
它说“方法(setVar())不适用于参数(ExampleClass)”。为什么我会收到此消息?
我认为我使用通配符的方式使引用变量 c 的类型为 GenClass,它可以接受任何类作为参数 - 在 EI 的位置上会有任何类。这只是变量的声明。然后我用它初始化它
这意味着我创建了一个 GenClass 类型的对象,它有一个 ExampleClass 类型的类作为参数。所以,我认为现在 GenClass 中的 E 将是 ExampleClass,并且我将能够使用方法 setVar(),将其作为参数类型为 ExampleClass。这是我的假设和理解,但Java似乎不喜欢它,我也不对。任何评论表示赞赏,谢谢。
java - 如何修复此 Java 泛型通配符错误?
在这个问题中,TofuBeer 在创建泛型时遇到了问题IterableEnumeration
。
答案来自 jcrossley3 指向这个链接http://www.javaspecialists.eu/archive/Issue107.html这几乎解决了这个问题。
还有一件事我不明白。正如埃里克森有效指出的那样,真正的问题是:
构造参数化类型时不能指定通配符
但是删除声明中的通配符也不起作用:
导致以下错误:
但是 JavaSpecialist 中的示例确实有效:
我能发现的唯一区别是,在 JavaSpecialists 博客中,Enumeration
来自 aVector
的签名是:
而失败的来自ZipFile
其签名:
最后,所有这些都被 for-each 构造和链接中建议的静态 make 方法吸收
但!!那个时事通讯的重点不是解决这个问题,而是避免需要指定一个泛型类型,只是因为语法看起来很丑!!
所以..我的问题是:
怎么了?
IterableEnumeration
当参数是Enumeration
其类型时,为什么不创建工作实例<? extends SomeClass>
?为什么 make for-each 结构会吞下问题?!!!
为什么会这样:
但这不起作用?
下面是 TofuBeer 原始代码的(略微)修改版本:
我想明白!!
java - 带有类和接口的 Java 泛型 - 齐心协力
我想要一个 Class 对象,但我想强制它代表的任何类扩展类 A 并实现接口 B。
我可以:
或者:
但我不能两者都做。有没有办法做到这一点?
java - 列表
我有一个关于泛型的 Java 问题。我宣布了一个通用列表:
然后在某种方法中,我尝试实例化并将项目添加到该列表中:
WheremyTypeInstance
只是一个类型的对象MyType
;它不会编译。它说:
List<capture#3-of ? 类型中的方法 add(capture#3-of ? extends MyType) extends MyType> 不适用于参数 (MyType)
任何的想法?
java - Scala的存在类型和Java通配符的区别?
比 Stack Overflow 问题更具体一点什么是存在类型?,Scala的存在类型和Java的通配符有什么区别,最好有一些说明性的例子?
到目前为止,在我所看到的所有内容中,它们似乎都相当。
一些参考。Martin Odersky提到了他们;谷歌对我的问题的热门回答:
MO:最初的通配符设计……受到存在类型的启发。事实上,原始论文有一个存在类型的编码。但是当实际的最终设计出现在 Java 中时,这种联系有点丢失了
java - 带有通配符的 Java 泛型
有任何方法可以解决这种情况(我试图尽可能简化这种情况):
这种情况给了我下一个错误:
我不确定是否有办法用泛型做到这一点,
java - 返回类型中推断的通配符泛型
Java 通常可以根据参数推断泛型(甚至根据返回类型,与例如 C# 相比)。
举个例子:我有一个通用类Pair<T1, T2>
,它只存储一对值,可以按以下方式使用:
该方法of
如下所示:
非常好。但是,这不再适用于以下需要通配符的用例:
(注意显式转换以List.class
生成正确的类型。)
代码失败并出现以下错误(由 Eclipse 提供):
类型不匹配:无法转换
TestClass.Pair<Class<capture#1-of ?>,String>
为TestClass.Pair<Class<?>,String>
但是,显式调用构造函数仍然可以按预期工作:
有人可以解释这种行为吗?是设计使然吗?想要吗?我是在做错什么,还是偶然发现了编译器中的设计缺陷/错误?
疯狂的猜测:“捕获#1-of ?” 不知何故,似乎暗示通配符是由编译器动态填充的,使类型 a Class<List>
,因此转换失败(从Pair<Class<?>, String>
到Pair<Class<List>, String>
)。这是正确的吗?有没有办法解决这个问题?
为了完整起见,这里是Pair
该类的简化版本:
java - Java泛型好奇心
我有一个接口A
,该类B
实现。
以下通用方法有效
但
没有(编译错误,类型不匹配),当我将输出定向到
defaultCollectionFactory(int count)
静态提供B
s 的集合,带有默认的标签方案。
关于为什么会这样的任何见解?似乎通用 U 和通配符在做同样的事情。
java - 使用 Collections.sort()制作用于对通用列表进行排序的 Comparator 对象
我正在尝试为实现 MyInterface 的任何类的对象列表实现通用排序实用程序方法。每个 Java API ( http://java.sun.com/javase/6/docs/api/java/util/Collections.html ),Collections.sort() 方法签名是:
我不确定带有通配符参数的列表是否可以替换“普通”参数化列表,但我尝试了:
并得到一个编译时错误,
因此,我将其更改为:
它编译并工作。有什么好的解释吗?