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

时间:2017-05-15 10:39:28

标签: java generics

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

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

它给了我这个错误:

  

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

     

CAP#1从捕获中扩展数字?扩展数字

     

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

1 个答案:

答案 0 :(得分:6)

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

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

static <T extends Number> long count(Collection<T> numbers, Predicate <T> predicate) {

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