2016-10-09 6 views
0

Während Labdas praktiziere ich Lambda s aus meinen main Methoden. Es läuft in Ordnung, aber IntelliJ zeigt Warnung, die besagt: Unchecked call to 'lambda(T, T)' as a member of raw type 'my.lambda.closure' bei line 18. Was fehlt mir hier?Ungeprüfter Aufruf von 'Lambda (T, T)' als Mitglied des Rohtyps 'my.lambda.closure'

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

Antwort

1

Sie haben Closure hier als Ausgangstyp definiert.

T getDesired(Closure closure) 

Was Sie bestimmt sein könnte

T getDesired(Closure<T> closure) 

Es gibt einen in Schließung BiPredicate genannt aufgebaut ist, die ein Paar von Werten prüft.

BTW, max und min sollte Integer sein, würde ich sie nicht zu Double ändern

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