2016-07-14 22 views
2

Wenn wir CodeWie wird mit der Pfeilnotation (->) eine geschützte Methode erstellt?

Stream.of(1,2,3,4,5).filter(i -> (i%2 == 0)).map(i -> i*i); 

der Ausdruck i -> (i%2 == 0) oder i -> i*i in eine private Methode schaltet folgende schreiben.

In meinem Anwendungsfall wird einer der Junit-Test geschrieben, um sicherzustellen, keine Methode ist privat (yaah, das ist mandatiert), und es schlägt für diese Lambda-Ausdruck.

Kann jemand etwas vorschlagen, in dem ich Junit nicht ändern muss, um einige Ausschlüsse für Lambda-Ausdrücke hinzuzufügen, aber diese Ausdrücke so machen, dass eine interne geschützte Methode ist?

+19

Ihr Test ist verrückt, und Sie sollten es loswerden. – SLaks

+1

Wenn dies Ihre Anforderung ist, definieren Sie die Methoden explizit und machen Sie sie geschützt. Aber, wie SLaks sagt, das ist eine geradezu wahnsinnige Anforderung. –

+4

Ich verstehe nicht, was du meinst, wenn du sagst, dass das Lambda "zu einer privaten Methode wird". Wenn es zu etwas "wird", ist es eine Instanz von 'Funktion' oder etwas, und diese Methoden sind öffentlich. Ich meine, wenn es zu einer privaten Methode würde, wie würden 'filter' und' map' in der Lage sein, sie aufzurufen? – aioobe

Antwort

8
protected static boolean isEvent(int i){ 
    return i %2 == 0 
} 

ints.stream().filter(MyClass::isEvent) 
+0

Das ist wirklich eine schöne Abhilfe, aber es ** tötet ** den ganzen Begriff der Pfeilnotation. :) Gibt es eine Möglichkeit, Pfeil nicht zu ersetzen und immer noch die geschützte Methode zu erhalten? –

+1

Methodenverweise sind absolut legal und idiomatisch um bestehende Methoden anstelle von Lambda zu verwenden. Anders herum - nicht so oft, ja :) – Nikem

+0

Ich kaufe deine Lösung. :) –