问题标签 [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.

0 投票
6 回答
73917 浏览

java - Java 泛型(通配符)

我对 Java 中的通用通配符有几个问题:

  1. List<? extends T>和 和有什么不一样List<? super T>

  2. 什么是有界通配符,什么是无界通配符?

0 投票
2 回答
1929 浏览

java - Java中的泛型,使用通配符

我有一个关于 Java 中的泛型的问题,即使用通配符。我有一个像这样的示例类 GenClass:

我有另一个简单的类:

我编写了以下测试类:

现在,如果我使用通配符并在测试类中这样写:

在:

编译器对这个新语句没有问题,但是,它抱怨

它说“方法(setVar())不适用于参数(ExampleClass)”。为什么我会收到此消息?

我认为我使用通配符的方式使引用变量 c 的类型为 GenClass,它可以接受任何类作为参数 - 在 EI 的位置上会有任何类。这只是变量的声明。然后我用它初始化它

这意味着我创建了一个 GenClass 类型的对象,它有一个 ExampleClass 类型的类作为参数。所以,我认为现在 GenClass 中的 E 将是 ExampleClass,并且我将能够使用方法 setVar(),将其作为参数类型为 ExampleClass。这是我的假设和理解,但Java似乎不喜欢它,我也不对。任何评论表示赞赏,谢谢。

0 投票
2 回答
1827 浏览

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 原始代码的(略微)修改版本:

我想明白!!

0 投票
3 回答
169104 浏览

java - 带有类和接口的 Java 泛型 - 齐心协力

我想要一个 Class 对象,但我想强制它代表的任何类扩展类 A 并实现接口 B。

我可以:

或者:

但我不能两者都做。有没有办法做到这一点?

0 投票
5 回答
61537 浏览

java - 列表

我有一个关于泛型的 Java 问题。我宣布了一个通用列表:

然后在某种方法中,我尝试实例化并将项目添加到该列表中:

WheremyTypeInstance只是一个类型的对象MyType;它不会编译。它说:

List<capture#3-of ? 类型中的方法 add(capture#3-of ? extends MyType) extends MyType> 不适用于参数 (MyType)

任何的想法?

0 投票
5 回答
7188 浏览

java - Scala的存在类型和Java通配符的区别?

比 Stack Overflow 问题更具体一点什么是存在类型?,Scala的存在类型和Java的通配符有什么区别,最好有一些说明性的例子?

到目前为止,在我所看到的所有内容中,它们似乎都相当。

一些参考。Martin Odersky提到了他们;谷歌对我的问题的热门回答

MO:最初的通配符设计……受到存在类型的启发。事实上,原始论文有一个存在类型的编码。但是当实际的最终设计出现在 Java 中时,这种联系有点丢失了

0 投票
1 回答
1577 浏览

java - 带有通配符的 Java 泛型

有任何方法可以解决这种情况(我试图尽可能简化这种情况):

这种情况给了我下一个错误:

我不确定是否有办法用泛型做到这一点,

0 投票
1 回答
2830 浏览

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该类的简化版本:

0 投票
2 回答
444 浏览

java - Java泛型好奇心

我有一个接口A,该类B实现。

以下通用方法有效

没有(编译错误,类型不匹配),当我将输出定向到

defaultCollectionFactory(int count)静态提供Bs 的集合,带有默认的标签方案。

关于为什么会这样的任何见解?似乎通用 U 和通配符在做同样的事情。

0 投票
2 回答
5798 浏览

java - 使用 Collections.sort()制作用于对通用列表进行排序的 Comparator 对象

我正在尝试为实现 MyInterface 的任何类的对象列表实现通用排序实用程序方法。每个 Java API ( http://java.sun.com/javase/6/docs/api/java/util/Collections.html ),Collections.sort() 方法签名是:

我不确定带有通配符参数的列表是否可以替换“普通”参数化列表,但我尝试了:

并得到一个编译时错误,

因此,我将其更改为:

它编译并工作。有什么好的解释吗?