有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java:在应用过滤器后创建一个简单的通用方法进行计数

我想创建一个简单的通用方法,在基于提供的predicate应用过滤器之后,对numbers进行计数

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

它给了我以下错误:

incompatible types: Predicate cannot be converted to Predicate<? super CAP#2> where CAP#1, CAP#2 are fresh type-variables:

CAP#1 extends Number from capture of ? extends Number

CAP#2 extends Number from capture of ? extends Number


共 (1) 个答案

  1. # 1 楼答案

    不能这样使用通配符,因为第二个参数取决于第一个参数!您的版本意味着您希望获取一组苹果,然后对其应用香蕉谓词

    换句话说:只需声明一个非未知的类型参数;用这个:

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

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