【问题标题】:Unchecked call to 'lambda(T, T)' as a member of raw type 'my.lambda.closure'未经检查地调用 'lambda(T, T)' 作为原始类型 'my.lambda.closure' 的成员
【发布时间】:2016-10-09 13:13:06
【问题描述】:

在练习 Labdas 时,我正在通过我的 main 方法传递 Lambdas。它运行正常,但IntelliJ 显示警告说:Unchecked call to 'lambda(T, T)' as a member of raw type 'my.lambda.closure' line 18。我在这里错过了什么?

package my.lambda;

interface Closure<T extends Number> {
    boolean lambda(T a, T b);
}

class Collection<T extends Number> {
    private T[] numbers;

    Collection(T[] numbers) {
        this.numbers = numbers;
    }

    T getDesired(Closure closure) {
        T desiredSoFar = numbers[0];

        for (T number : numbers) {
            if (closure.lambda(number, desiredSoFar))
                desiredSoFar = number;
        }

        return desiredSoFar;
    }
}

public class Lambda {
    public static void main(String[] args) {
        Integer[] iOb = {1, 2, 3, 12, 4, 5, 6};
        Collection<Integer> integerCollection = new Collection<>(iOb);

        Double max = integerCollection.getDesired((a, b) -> a.doubleValue() > b.doubleValue())
                .doubleValue();
        Double min = integerCollection.getDesired((a, b) -> a.doubleValue() < b.doubleValue())
                .doubleValue();

        System.out.println("Maximum of the integers: " + max);
        System.out.println("Maximum of the integers: " + min);

        Double[] dOb = {1.1, 2.2, 3.3, 12.12, 4.4, 5.5, 6.6};
        Collection<Double> doubleCollection = new Collection<>(dOb);

        max = doubleCollection.getDesired((a, b) -> a.doubleValue() > b.doubleValue());
        min = doubleCollection.getDesired((a, b) -> a.doubleValue() < b.doubleValue());

        System.out.println("Maximum of the doubles: " + max);
        System.out.println("Maximum of the doubles: " + min);
    }
}

【问题讨论】:

    标签: java lambda closures unchecked functional-interface


    【解决方案1】:

    您已在此处将Closure 定义为原始类型。

    T getDesired(Closure closure) 
    

    你想要的可能是

    T getDesired(Closure<T> closure) 
    

    有一个名为BiPredicate 的内置闭包可以测试一对值。

    顺便说一句,maxmin 应该是 Integer,我不会将它们更改为 Double

    Integer max = integerCollection.getDesired((a, b) -> a > b);
    

    【讨论】:

      猜你喜欢
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多