问题标签 [unbounded-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 - 具有可选多个边界的泛型,例如 List
我有一个方法,它应该只接受Map
其键的类型String
和值的类型Integer
or String
,但不接受,比如说,Boolean
。
例如,
不能如下声明 Map(以强制编译时检查)。
unbounded wildcard
除了将值类型声明为 an并在运行时验证Integer
或在运行时验证之外,最好的选择是什么String
?
此方法接受一组属性来配置底层服务实体。String
实体支持类型和Integer
单独的属性值。例如,一个属性maxLength=2
有效,defaultTimezone=UTC
也有效,但allowDuplicate=false
无效。
java - 如何在通用通配符映射中添加一些值
我已经解决了几个相关的问题,但这些问题并没有帮助我。实际上,我有一个返回类型为的方法Map<?,?>
,我想使用 Mockito 进行单元测试。示例代码是:
我想模拟一下:
模拟代码是:
如果我返回带有 String 的普通 Map 的值,那么它会抛出编译时错误,但 null 除外(根据文档)。
但我想添加一些像 String 这样的数据,以便在获取模拟地图数据后我可以做进一步的工作。
java - 带有通配符的列表上的 AssertJ `containsExactly` 断言
我有一个 getter 返回一个带有通配符的列表:
Bar
另一个接口在哪里。
当我像这样用 AssertJ 编写断言时:
编辑:我的完整用法是链接 ausingElementComparator
并提供 aComparator<Bar>
来比较预期的Bar
实例。
我得到这个编译错误:
ListAssert 类型中的 containsExactly(capture#46-of ? extends Bar...) 方法不适用于参数 (Bar, Bar)
我的第一个解决方案是转换结果:
然后我收到一个警告:
类型安全:从列表到列表的未经检查的转换
可以使用 删除警告@SuppressWarnings("unchecked")
,但中间的强制转换仍然不会使断言真正可读。
我的第二个解决方案是指示 ELEMENT 通用参数的值:
好一点,但也不是很好(不能静态导入,行首不利于可读性)
我想我正在寻找另assertThat
一种列表方法,其中类类型可以指定为第二个参数:
这样我应该能够写出这样的东西:
java - Java - 从无界通配符转换为字符串
所以,起初我有一句话说:
但是,由于泛型类型信息在运行时被删除,我不能指定它是 aSet<String>
而是 unbounded wildcard Set<?>
。但是我需要将此集合用于与字符串相关的处理,例如附加到 JTextArea,因此当我需要字符串出来时,这种无界通配符类型不是很有用。
所以,我试过这个
Set<String>
这种转换将它从无界转换为字符串类型(如果输入是 a ,我相信它会是Set
)但这不是很安全,是吗?我收到一条错误消息,说我可以压制未经检查的演员表,但我觉得可能有另一种方法可以解决这个问题。有任何想法吗?
编辑:input
通过从私有 LAN ip 上的服务器套接字的输入流序列化来初始化。
java - 使用通配符转换常量泛型
我正在做静态 util 方法,它返回带有空可选的完整未来:
为了提高效率,我想返回相同的已完成常量实例CompletableFuture
- EMPTY_FUTCompletableFuture<Optional<T>>
,但由于无界通配符而无法将其转换为。
当然我想为任何类型调用这个完成的未来方法,与Optional.empty()和CompletableFuture.completedFuture(U)几乎相同
如何将具有无界通配符的泛型转换为特定类型?有可能吗?
java - 方法调用中通配符的奇怪行为
我正在研究Java中的通配符主题,我被困在下面的代码中
如果您通过此代码调用这些方法,则会出现错误,这是可以理解的
但是,如果您通过添加一个额外的 arg 来更改这些方法的签名,就像这样
并打电话给他们
为什么只是通过添加一个额外的参数来实现这种行为?为什么有界列表仅通过添加一个 xtra arg 就可以接受无界列表?
java - Java无界通配符误区
假设我定义了一组参数化类型,如下所示:
为什么将该引用传递给签名中具有无界通配符的方法是错误的,如下所示:
scala - 使用运行时配置使参数化的 ScalaCache 通用
包含该问题的 git 存储库可以在这里找到https://github.com/mdedetrich/scalacache-example
我目前遇到的问题是我试图让我的 ScalaCache 后端不可知,它可以在运行时使用类型安全配置进行配置。
我遇到的问题是 ScalaCache 参数化了缓存的构造函数,即构建一个你会做的咖啡因缓存
ScalaCache(CaffeineCache())
至于SentinelRedisCache
你会在哪里做
ScalaCache(SentinelRedisCache("", Set.empty, ""))
就我而言,我创建了一个通用缓存包装器MyCache
,如下所示
我们需要随身携带,CacheRepr
因为这就是 ScalaCache 知道如何序列化任何类型的方式T
。CaffeineCache
使用 a CacheRepr
which is InMemoryRepr
where asSentinelRedisCache
使用 a CacheRepr
which is Array[Byte]
。
这就是问题的症结所在,我有一个Config
只存储正在使用的缓存的地方,即
它 a 的原因Cache[_]
是因为在编译时我们不知道正在使用什么缓存,ApplicationConfig
将在运行时使用CaffeineCache
/实例化SentinelRedisCache
。
这就是问题的症结所在,Codec
如果我们只是将我们applicationConfig.cache
作为构造函数,Scala 无法找到通配符类型的隐式,即https://github.com/mdedetrich/scalacache-example/blob/master/src /main/scala/Main.scala#L17
如果我们取消注释上面的行,我们得到
有谁知道如何解决这个问题,本质上我想在我的ApplicationConfig
, 缓存中指定类型Cache[InMemoryRepr | Array[Byte]]
而不是仅仅Cache[_]
(以便 Scala 编译器知道查找任何一个的隐含InMemoryRepr or Array[Byte]
并MyCache
定义类似这样的内容
java - java中的通配符和类型参数范围
考虑这种情况:
据我了解类型界限,在这种情况下,两者的有效上限T
和E
is class A
。所以问题是:为什么 javac 在声明字段时不接受类 A 作为参数b
,但wildcard
? extends A
在声明字段时接受b2
?