java - 为什么 google-collections 包含语义相同的函数和奇怪的泛型?

标签 java generics guava

为什么 google-collections 或 guava 包含语义相同的函数? 示例:

static
<T> Predicate<T>
and(Predicate<? super T>... components) 

static
<T> Predicate<T>
and(Predicate<? super T> first, Predicate<? super T> second) 

即所有可以接受多个参数的函数。

第二个问题为什么这些函数的定义使用泛型 <? super T>而不是 <T>

最佳答案

要回答第一个问题,varargs 版本 ( Predicate<? super T>... ) 会警告您在使用多个通用谓词(例如 Predicate<T> )调用时未经检查地创建通用数组。对于组合两个谓词的常见情况,您不会收到该警告。

回答第二个问题,服用Predicate<? super T>意味着你可以传入 Predicate<Object> (或 Predicate<Number> 或其他)调用创建 Predicate<Integer> 的方法时.例如,如果 Predicates.notNull()Predicate<Object> (因为它应该是)你想把它和一些 Predicate<Integer> 结合起来, 如果要求参数的类型为 Predicate<T> 则不可能.

关于java - 为什么 google-collections 包含语义相同的函数和奇怪的泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6252875/

相关文章:

Java 8 使用多个键进行分组

java - 如何使用 “gradle build”命令创建fatJar

generics - 如何避免将具体结构更改为通用结构所产生的链式 react ?

java - 将对象转换为特定数字类型的优雅方法

java - google guava cachebuilder 在 exipreAfterAccess 和 expireActerWrite 之间使用更长的时间

java - 瘦 Controller

java - 如何使用 Java 获取给定证书文件的私钥

java - 数组类型删除

c# - 如何使用 WithAllProperties 等方法扩展 epplus 数据提取器

java - 如何将字符串解释为负数或零并相应地抛出 IAE?