问题标签 [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 投票
5 回答
41543 浏览

java - Java:有界通配符或有界类型参数?

最近看了这篇文章:http: //download.oracle.com/javase/tutorial/extra/generics/wildcards.html

我的问题是,而不是创建这样的方法:

我可以创建这样的方法,并且效果很好:

我应该使用哪种方式?通配符在这种情况下有用吗?

0 投票
1 回答
267 浏览

java - 原始类型、无界通配符和有界通配符

我有一个简单的问题如下:这是一个关于整个问题的简单示例:

根据 khalid mughal 的 Java SCJP(一本非常好的书!):

我确实理解任何原始类型(示例 a)在分配给任何有界通配符引用时,都会出现未经检查的警告(因为该原始类型 a 中的内容可以是任何东西)。

我的问题是因为 c 是最高上限(?扩展对象),不应该在没有警告的情况下将 a 分配给 c 吗?

0 投票
2 回答
3278 浏览

java - Java 泛型和有界类型

我有一个 ConcurrentMap 的包装类,如下所示:

标记的行会触发以下编译错误:

我怀疑无界通配符是罪魁祸首,但我无法更改方法签名,因为它是从 ConcurrentMap 接口继承的。有任何想法吗?

0 投票
3 回答
172 浏览

java - java有界通配符泛型的编译器错误

具有以下代码:

我在最后两行得到编译错误,但虽然我已经考虑过它,但我不明白为什么会出现编译错误。

当我评论最后一行时,我仍然得到上述编译错误,但据我了解,编译器应该能够从这些行中推断出正确的类型(堆栈)。

非常感谢

0 投票
5 回答
17342 浏览

java - 为什么在有界通配符泛型中不能有多个接口?

我知道 Java 的泛型类型有各种违反直觉的属性。特别是我不明白的一个,我希望有人可以向我解释。为类或接口指定类型参数时,您可以对其进行绑定,使其必须使用public class Foo<T extends InterfaceA & InterfaceB>. 但是,如果您要实例化一个实际对象,这将不再起作用。List<? extends InterfaceA>很好,但List<? extends InterfaceA & InterfaceB>无法编译。考虑以下完整的片段:

似乎bar应该明确定义的语义——我想不出任何类型安全性的损失,因为允许两种类型的交集而不仅仅是一种。不过我敢肯定有一个解释。有谁知道它是什么?

0 投票
5 回答
103693 浏览

java - Mockito:使用有界通配符返回类型的存根方法

考虑这段代码:

编译器抱怨试图为dummyMethod(). 关于如何处理返回具有有界通配符类型的存根方法的任何指针?

0 投票
6 回答
2012 浏览

java - 通用:ArrayList 的?在 Java 中扩展 ISomeInterface

我在下面的代码中遇到了一些麻烦。

这将为“returnedEvents.add(new GoogleEvent()); line of code”返回以下编译错误:

ArrayList 类型中的方法 add(capture#1-of ? extends IEvent) 不适用于参数 (GoogleEvent)

类的声明GoogleEvent如下:

我知道在 Java 中使用泛型有一些棘手的部分,因此是通配符,但我似乎无法弄清楚这一点。

谢谢。

0 投票
2 回答
2430 浏览

java - java.lang.Class的getInterfaces()方法为什么返回Class []而不是Class []?

(为了澄清问题,“T”指的是在 Class 中声明的类型参数)

仅作为示例,请查看以下应用程序:

输出是预期的:

因此,基于上面的这个例子,我们可以看到编译器识别出 InterfaceA确实满足 wildcard 的边界,所有其他接口也是如此。

直觉上,我希望以下内容是安全的,但事实并非如此:

编译器发出警告,因为签名说它返回 Class;但是,Class 的 javadoc 声明如下:

如果此对象表示一个类,则返回值是一个数组,其中包含表示该类实现的所有接口的对象。

在我们的例子中,“这个对象”指的是ClassA。基于此声明,如果我们调用:

那么我们从逻辑上知道,Class<?>返回数组中的每个都将包含对超类型的引用ClassA

作为一个额外的参考点:

来自 Java 语言参考,第三版:

一个类必须实现其直接超类和直接超接口所做的所有接口。这种(多个)接口继承允许对象在不共享任何实现的情况下支持(多个)公共行为。

阅读规范的这个部分和其他部分,我认为任何由类实现或扩展的类或接口T都会落入 bounds <? super T>

编辑:

有人认为我的问题没有具体的理由。我将提供一个例子:

问题出在第 15 行。您必须强制转换<? super W>才能获得正确的类型。编译器警告可以被抑制,但它是否合理?是否存在这种演员表不正确的情况?

0 投票
3 回答
6971 浏览

java - Java泛型方法:super不能用?

所以我有这个方法:

我想返回集合而不是使用 void 方法:

意图做这样的事情(在哪里MyItemClass extends MyItemBaseClass):

但我得到一个语法错误super

令牌“super”的语法错误,预期

是什么赋予了?我可以解决这个问题吗?

0 投票
1 回答
146 浏览

java - 关于通用有界通配符类型的困惑

非常琐碎的Java问题。此代码有一个错误:

修复它的正确方法是什么?

的想法T基本上只是一种类的层次结构根,所以给定这样的层次结构:

one 将T设置为EntitygetEditorFor(T obj)负责返回Editor<X>whereX取决于obj的具体类型,并且始终为 Is-A T。所以,如果你有SubTypeDependentEditor<Entity>getEditorFor(T obj)返回Editor<EntityA>when objisEntityAEditor<EntityB>when objis EntityB

这有没有可能在没有警告的情况下实施?

更新:

基本上可以有任何其他签名,但实现该代码的代码只有对象是Editor<X>,所以如果这个方法返回Editor<T>我不知道如何实现getEditorFor(T obj)