我想创建一个简单的通用方法来计算应用过滤器后的数字

Sub*_*dal 6 java generics

我想创建一个简单的通用方法来计算应用过滤器后的数字.

static int count(Collection < ? extends Number > numbers, Predicate < ? extends Number > predicate) {
  return numbers.stream().filter(predicate).count();
}
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:

不兼容的类型:谓词不能转换为Predicate<? super CAP#2> CAP#1,CAP#2是新的类型变量:

CAP#1从捕获数量扩展数量?扩展数量

CAP#2从捕获数量扩展数量?扩展数量

Gho*_*ica 6

您不能使用这样的通配符,因为第二个参数取决于第一个!你的版本意味着你想要一个苹果集合然后应用香蕉谓词.

换句话说:简单地声明一个not-unkown类型参数; 并使用:

static <T extends Number> long count(Collection<T> numbers, Predicate <T> predicate) {
Run Code Online (Sandbox Code Playgroud)

对于记录:count()返回一个长的结果; 因此我相应地改变了返回类型.如果那不是你想要的,你必须转换为int,但生活在(潜在的)信息丢失.