2016-07-14 3 views
2

Когда мы пишем следующий кодКак использовать обозначение стрелки (->) для создания защищенного метода?

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

Выражение i -> (i%2 == 0) или i -> i*i превратится в частный метод .

В моем случае, один из тестов junit написан для обеспечения того, чтобы какой-либо метод не был приватным (yaah, это обязательно), и это не удается для этих лямбда-выражений.

Может кто-нибудь предложить что-то, в котором мне не нужно менять junit, чтобы добавить исключение для лямбда-выражений, но сделать это выражение, чтобы сделать защищенным способом внутри?

+19

Ваш тест безумный, и вы должны избавиться от него. – SLaks

+1

Если это ваше требование, определите методы явно и сделайте их защищенными. Но, как говорит Слакс, это откровенно безумное требование. –

+4

Я не понимаю, что вы имеете в виду, когда говорите, что лямбда «превращается в частный метод». Если он «превращается» во что-либо, это экземпляр «Function» или что-то еще, и эти методы являются общедоступными. Я имею в виду, если бы он превратился в частный метод, как бы 'filter' и' map' могли их вызывать? – aioobe

ответ

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

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

Это действительно хорошо обходное решение, но оно ** убивает ** все понятие обозначения стрелки. :) Есть ли способ не заменить стрелу и по-прежнему получить защищенный метод? –

+1

Ссылки на методы - это абсолютно легальный и идиоматический способ использования существующих методов вместо лямбда. Другой способ - не так часто, да :) – Nikem

+0

Я покупаю ваше решение. :) –

Смежные вопросы