问题标签 [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 - 当类具有有界类型参数时使用有界通配符
假设我有一堂课
以及D
具有两个扩展它的类的类:B
and C
,例如
现在,在某个地方,假设我想要一个A
's 数组,无论是B
-kind 还是C
-kind。(例如,将类中的函数应用于D
数组中的所有项目。)
然后我应该再次限制类型吗?
换句话说:这些选项中的哪一个是可以选择的?
A<?>[] re;
A<? extends D>[] re;
哪一个是最佳实践?
java - 未根据上限类型参数检查下限通配符
我想知道为什么这段代码编译成功?
源代码:
编译成功
它是如何工作的,为什么会编译?M是任意类型,为什么可以使用呢?应该是:<M extends Number>
?这不会编译:
错误信息:
类型参数 M 不在类型变量 K 的范围内,其中 M、K 是类型变量: M 扩展在方法 useMe(A) 中声明的对象 K 扩展在类 A 中声明的数字
有什么区别?
java - 需要泛型转换解释
以下是使用泛型扩展基类型的两种形式:
我不明白。有什么区别?这两种方法似乎都返回相同的扩展 Runnable 对象的 BlockingQueue。
java - 如何测试泛型列表是否包含Java中子类型的确切子集合?
我有一个抽象类 AbstractService 和几个扩展这个抽象类的类:
然后我有一个 ServiceFactory 根据我传递的参数返回一个包含一些服务的通用列表:
在我的 UnitTest 中,我想验证我的服务列表是否正好包含 3 个 AService 子类型。我现在这样做的方式是:
当 actualServices 包含少于 3 个 Aservice 时,测试正确失败。这个解决方案唯一的问题是如果actualServices包含超过3个AService,测试通过...
有没有一种方法可以做到这一点,或者我应该使用循环自己实现它?
java - 从抽象泛型到非抽象非泛型
我最近一直在从事一个使用通用最佳搜索算法的 Java 项目。为了使算法本身通用,我在算法中使用的所有类上使用了一堆泛型。
这是所有的类/接口声明:
现在理论上,所有这些都可以正常工作。但是,当我应用算法时,我计划将“E”作为某种游戏状态(比如棋盘、纸牌游戏、探路者、你有什么)。因此,我创建了以下类:
我对这个特定设置的意图是让 GameState 成为代表特定游戏状态的字符串的容器。但是,这会导致尝试使用以下代码创建 StateSearch 时出现问题:
我最终得到一个绑定不匹配错误,指出这GameState
不是<E extends AbstractState<E>>
. 现在,我相信我明白为什么会这样了。我的想法是因为GameState
extends AbstractState<String>
,而不是AbstractState<E>
。
不幸的是,我不希望我的GameState
类有一个通用类型。它旨在实现实际做某事,因此从泛型切换到字符串。例如,我可能想GameState
在一个完全不同的项目中创建一个类,该项目使用整数来实现它。
鉴于我在类中使用和执行的方法、变量和操作GameState
,它不能是通用的。
毕竟我的问题是:有没有办法将我的GameState
类实现为非泛型类,以满足我的类提出的边界要求StateSearch
?
我不介意是否必须更改某些类声明。关键是我需要 Algorithm 是Generic,并且 Implementation 是Non-Generic。GameState
班级需要成为我在两者之间过渡的点。
编辑:
我需要
GameState
类作为某个游戏的实现。和接口旨在让我无需实际实现即可构建状态搜索算法AbstractState
。State
以这种方式进行设置允许我在多个游戏中应用此设置。
该类StateSearch
基本上只是将状态从我的 中拉出StateQueue
,这只是一个AbstractState
按优先级系统排序的类向量(因此是 Comparable 实现)。扩展状态树的方式是使用类中的getNextState()
函数AbstractState
。这很好,但该getNextState()
函数基本上是从我的getSuccessors()
函数中获取最佳状态,该状态只能在GameState
Class 中定义。在其他地方,它只是抽象的。
我无法getSuccessors()
以通用方式定义函数,因为它纯粹基于实现。此函数旨在从当前状态返回所有可能的状态。例如,如果游戏是井字游戏,该getSuccessors()
函数将返回一个游戏状态列表,其中每个状态代表一个可能的移动。
该类GameState
还包含 a getEstimatedCost()
,getRunningCost()
它基本上分别充当h(x)和g(x)函数。这也只能在GameState
类中定义,因为两者都取决于实现。
java - java泛型中的有界通配符
我正在Core Java volume-1 by Horstmann, Cay.S
阅读generics
。我无法理解教科书的一些解释。我给出了作者引用的示例代码。其次是书中的文字和我的问题。
从书中:
"""没有损坏是可能的。调用setFirst
是一个type error
。要了解原因,让我们仔细看看 type Pair<? extends Employee>
。它的方法如下所示:
这使得无法调用该setFirst
方法。compiler
唯一知道它需要一些subtype
,但Employees
它不知道是哪种类型。它拒绝pass any specific type
——毕竟
?
可能不匹配它。"""
问题:我不明白为什么它拒绝传递任何特定类型。那么这个方法接受什么?
? extends Employee
-- 表示包括 Employee 和 Employee 的任何子类型。所以通过员工应该是合法的吗?
从书中:
编译器不知道该setFirst
方法的确切类型,因此不能用 type 的对象调用它Employee or Object
,而只能用Manager
或subtype
as来调用它executive
。
问题:所以在这里我说该方法可以接受任何 Manager 对象或扩展 Manager 对象(类似于上面绑定的 subytpe)。我不清楚为什么?
从书中:
Intuitively speaking, wildcards with supertype bounds let you write to a generic object, while
wildcards with subtype bounds let you read from a generic object.
问题:我根本无法遵循它。听上去很简单,但不符合逻辑的意思。
java - Java构造函数中的泛型?
考虑这个假设的课程(我在一个在线视频中找到):
Contrived
这里可以接受的类型变量是Number
或者一些子类型Number
。但是类本身继承自ArrayList
,所以无论类获得什么类型,都将决定ArrayList
.
现在有一个字段叫做values
,就是List<? extends T values>
。那么这意味着什么?是否list
可以容纳任何延伸的东西T
(进而延伸Number
)。
PECS (producer extends, consumer super)
按照规则,我可以只用它来List
读取元素而不是添加到list
.
constructor
如果我需要通过 a ,看起来会怎样list of doubles or some type T
?
java - 在接口上使用通配符
考虑以下类:
以下代码正常工作:
但是,以下代码不起作用:
我知道它不起作用,因为它应该只能添加 to的一个具体子类型,但是它是怎么来的,下面的代码也不起作用?Notifiable
set2
也许更有趣的是,为什么以下工作?
java - Java 嵌套泛型类型
为什么必须使用泛型类型Map<?, ? extends List<?>>
而不是更简单Map<?, List<?>>
的以下test()
方法?
请注意以下工作,并且这三种方法无论如何都具有相同的擦除类型。