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

java - Java:帮助我理解:如何在有界通配符字段上使用接口方法?

我无法理解为什么我可以使用这样的有界通配符,如果我不能(似乎)做任何(通用类型)使用它。

如果我在一个类中有一个通配符字段,我就不能使用任何带有已实现接口的通用参数的方法(除非我null作为参数提供)。

FWIW,我无法说服 C# 编译器接受类似的东西。

我错过了什么吗?

0 投票
2 回答
1292 浏览

java - 在番石榴中,为什么只使用“T”,而“?super T”是可能的?

为什么实用程序工厂方法经常使用特定的泛型参数(如T)而不是有界通配符参数(如? super T)?

例如,Functions#forPredicate的签名是:

为什么不使用:

哪个会使类似以下的事情成为可能?

是不是因为消费者Function并且Predicate被期望有必要的有界通配符参数来使这变得不必要?例如,Iterables#find上的通用边界将允许 aPredicate<Number>用于 a Iterable<Integer>

还有其他原因吗?

0 投票
1 回答
73 浏览

java - Java:不是通配符边界的运算符

在做了一些阅读之后,似乎可以使用 & 运算符来要求多个扩展:Class<T extends Class1 & Class2> classObj;

但是,我正在寻找一种在编译时强制执行“非”功能的方法。我有香蕉扩展水果的例子。但是,我追求的是:

显然Class<? extends Fruit ! Banana>不是有效的语法。你会推荐什么方法来在编译时强制执行这种类型的层次结构?

0 投票
3 回答
89 浏览

java - 使用`的区别?参数和变量中的 super`

我以为我已经用super. 但我一定是完全错误的:

用这个简单的例子:

这段代码运行良好,因为我们传入了一个 Dog 的超类:

但是,我不明白的是我认为这是同一件事:

但它无法编译。两者有什么区别?


顺便说一句,我想偷偷问另一个问题。有没有区别

鉴于类型擦除在编译时将其删除,我认为这与编译器检查引用类型是一样的。它是否正确?

0 投票
4 回答
3661 浏览

java - Generic 0 不能转换为 java.lang.Short

我班上有两张地图(我是泛型新手)

如果地图中不存在键,我想获得一个零值。所以我做了这个包装方法来最小化打字containsKey(key)

我称之为

对于第二种情况,它给了我:

所以可能我需要做类似的事情: new Number(0),但 Number 是抽象的。

我该如何解决?

编辑:

我的想法是在没有额外 if 的情况下进行算术运算:

0 投票
3 回答
89 浏览

java - java泛型歧义

如果有一个node<E>具有两个操作的泛型类型,比如setData(E Type)andE getData()并且 lets0是的一个实例,node那么node<? extends Number>为什么编译器s0.setData(Number Type)至少不允许我使用呢?我可以理解为什么不允许使用其他类型,但为什么不允许setData放入 Number 类型,因为我们确定节点的类型至少是 number?

我的代码如下所示:

0 投票
1 回答
91 浏览

java - 上限泛型的问题

我在使用包含使用泛型的成员的类时遇到了一些问题。考虑以下示例类:

然后我有以下使用结构的类

就其本身而言,这是行不通的。

这是有道理的;StructureImpl<BaseRequest> 实际上不是 StructureImpl<SubRequest> 的子类。因此,我尝试修改 StructureUsingObject 以使用通配符:

这也不起作用;

好的,这也是有道理的,尽管自动完成工具提示没有(它声明 getDependencies 应该有 (null t) 作为它的参数)。我真的不知道从这里去哪里。我不能在 foreach 中使用通配符。我怎样才能满足我的 StructureUsingObject 可以接受具有 BaseRequest 子类的结构的要求,同时还能够使用列表中的元素调用 getDependencies?

0 投票
2 回答
1243 浏览

java - Java 中的下限是独占的还是包含的?

我正在阅读 Java 完整参考第 7 版,它说 Java 泛型中的下限是排他性的,但我在这里发现了相反的情况(它说它是包容性的。)是因为 SE 6 与 SE 7 不同吗?

编辑:Java the Complete Reference 7th edition 讨论了SE 6

0 投票
5 回答
1227 浏览

java - Java 泛型(有界通配符)

根据 Joshua Bloch 的“Effective Java”一书,有一条关于如何/何时在泛型中使用有界通配符的规则。这条规则就是 PECS(Producer-Extends,Comsumer-Super)。当我研究以下示例时:

我知道这条规则非常适合这个例子。我必须将该方法声明pushAll为以下示例:

但是,如果我有以下示例,会发生什么?

我必须声明pushAll如下:

根据PECS规则,上述声明是错误的。但我想要 a Stackof Integers 并传递给这个Stacka Number。为什么不去做呢?
为什么我应该总是使用extends关键字?为什么使用super是错误的?
当然,同样代表消费者的观点。为什么消费者应该永远是super


PS:更具体地说,您可以在参考书的“第 28 项”部分找到上述示例。

0 投票
3 回答
192 浏览

java - 将“超级”与“?”一起使用 在爪哇

我正在尝试阅读和理解一些 Java 代码。这里是:

是什么<? super PopulationLoadContext>意思?