问题标签 [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:帮助我理解:如何在有界通配符字段上使用接口方法?
我无法理解为什么我可以使用这样的有界通配符,如果我不能(似乎)做任何(通用类型)使用它。
如果我在一个类中有一个通配符字段,我就不能使用任何带有已实现接口的通用参数的方法(除非我null
作为参数提供)。
FWIW,我无法说服 C# 编译器接受类似的东西。
我错过了什么吗?
java - 在番石榴中,为什么只使用“T”,而“?super T”是可能的?
为什么实用程序工厂方法经常使用特定的泛型参数(如T
)而不是有界通配符参数(如? super T
)?
例如,Functions#forPredicate的签名是:
为什么不使用:
哪个会使类似以下的事情成为可能?
是不是因为消费者Function
并且Predicate
被期望有必要的有界通配符参数来使这变得不必要?例如,Iterables#find上的通用边界将允许 aPredicate<Number>
用于 a Iterable<Integer>
:
还有其他原因吗?
java - Java:不是通配符边界的运算符
在做了一些阅读之后,似乎可以使用 & 运算符来要求多个扩展:Class<T extends Class1 & Class2> classObj;
但是,我正在寻找一种在编译时强制执行“非”功能的方法。我有香蕉扩展水果的例子。但是,我追求的是:
显然Class<? extends Fruit ! Banana>
不是有效的语法。你会推荐什么方法来在编译时强制执行这种类型的层次结构?
java - 使用`的区别?参数和变量中的 super`
我以为我已经用super
. 但我一定是完全错误的:
用这个简单的例子:
这段代码运行良好,因为我们传入了一个 Dog 的超类:
但是,我不明白的是我认为这是同一件事:
但它无法编译。两者有什么区别?
顺便说一句,我想偷偷问另一个问题。有没有区别
鉴于类型擦除在编译时将其删除,我认为这与编译器检查引用类型是一样的。它是否正确?
java - Generic 0 不能转换为 java.lang.Short
我班上有两张地图(我是泛型新手)
如果地图中不存在键,我想获得一个零值。所以我做了这个包装方法来最小化打字containsKey(key)
我称之为
对于第二种情况,它给了我:
所以可能我需要做类似的事情: new Number(0)
,但 Number 是抽象的。
我该如何解决?
编辑:
我的想法是在没有额外 if 的情况下进行算术运算:
java - java泛型歧义
如果有一个node<E>
具有两个操作的泛型类型,比如setData(E Type)
andE getData()
并且 lets0
是的一个实例,node
那么node<? extends Number>
为什么编译器s0.setData(Number Type)
至少不允许我使用呢?我可以理解为什么不允许使用其他类型,但为什么不允许setData
放入 Number 类型,因为我们确定节点的类型至少是 number?
我的代码如下所示:
java - 上限泛型的问题
我在使用包含使用泛型的成员的类时遇到了一些问题。考虑以下示例类:
然后我有以下使用结构的类
就其本身而言,这是行不通的。
这是有道理的;StructureImpl<BaseRequest> 实际上不是 StructureImpl<SubRequest> 的子类。因此,我尝试修改 StructureUsingObject 以使用通配符:
这也不起作用;
好的,这也是有道理的,尽管自动完成工具提示没有(它声明 getDependencies 应该有 (null t) 作为它的参数)。我真的不知道从这里去哪里。我不能在 foreach 中使用通配符。我怎样才能满足我的 StructureUsingObject 可以接受具有 BaseRequest 子类的结构的要求,同时还能够使用列表中的元素调用 getDependencies?
java - Java 中的下限是独占的还是包含的?
我正在阅读 Java 完整参考第 7 版,它说 Java 泛型中的下限是排他性的,但我在这里发现了相反的情况(它说它是包容性的。)是因为 SE 6 与 SE 7 不同吗?
编辑:Java the Complete Reference 7th edition 讨论了SE 6。
java - Java 泛型(有界通配符)
根据 Joshua Bloch 的“Effective Java”一书,有一条关于如何/何时在泛型中使用有界通配符的规则。这条规则就是 PECS(Producer-Extends,Comsumer-Super)。当我研究以下示例时:
我知道这条规则非常适合这个例子。我必须将该方法声明pushAll
为以下示例:
但是,如果我有以下示例,会发生什么?
我必须声明pushAll
如下:
根据PECS规则,上述声明是错误的。但我想要 a Stack
of Integer
s 并传递给这个Stack
a Number
。为什么不去做呢?
为什么我应该总是使用extends
关键字?为什么使用super
是错误的?
当然,同样代表消费者的观点。为什么消费者应该永远是super
?
PS:更具体地说,您可以在参考书的“第 28 项”部分找到上述示例。
java - 将“超级”与“?”一起使用 在爪哇
我正在尝试阅读和理解一些 Java 代码。这里是:
是什么<? super PopulationLoadContext>
意思?