2016-10-09 5 views
0

Labdasを練習中、mainメソッドからLambdaを渡しています。それは問題なく実行されますが、IntelliJには、Unchecked call to 'lambda(T, T)' as a member of raw type 'my.lambda.closure'line 18という警告が表示されます。私はここで何が欠けていますか?生タイプ 'my.lambda.closure'のメンバーとして 'lambda(T、T)'のチェックされていない呼び出し

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); 
    } 
} 

答えて

1

ここでは生の種類としてClosureを定義しています。あなたが意図した何

T getDesired(Closure closure) 

T getDesired(Closure<T> closure) 

値のペアをテストするBiPredicateと呼ばれる閉鎖に建てがあるかもしれません。

ところで、maxminIntegerする必要があり、私はDouble

Integer max = integerCollection.getDesired((a, b) -> a > b); 
にそれらを変更しません
関連する問題