Лямбда-выражения и исключения в Java

Лямбда-выражение может генерировать исключение. Но если оно генерирует проверяемое исключение, то последнее должно быть совместимо с исключени­ями, перечисленными в выражении throws из объявления абстрактного метода в функциональном интерфейсе.

Лямбда-выражения и исключения в Java

Эта особенность демонстрируется в приведенном ниже примере, где вычисляется среднее числовых значений типа double в масси­ве.

А если лямбда-выражению передается массив нулевой длины, то генерируется исключение типа EmptyArrayException.

Как следует из данного примера, это ис­ключение перечислено в выражении throws из объявления метода func() в функциональном интерфейсе DoubleNumericArrayFunc.

Программа выводит следующее:

В результате первого вызова метода average.func() возвращается среднее значение 2.5. А при втором вызове этому методу передается массив нулевой длины, что приводит к генерированию исключения типа EmptyArrayException.

Напомним, что наличие выражения throws В объявлении метода func() обязательно.

Без этого программа не будет скомпилирована, поскольку лямбда-выражение перестанет быть совместимым с методом func().

Данный пример демонстрирует еще одну важную особенность лямбда-выражений. Обратите внимание на то, что параметр, указываемый при объявлении метода func() в функциональном интерфейсе DoubleNumericArrayFunc, обозначает массив, тогда как параметр лямбда-выражения просто указан как n, а не n[].

Напомним, что тип параметра лямбда-выражения выводится из целевого контекста. В данном случае целевым контекстом является массив типа double[], поэтому и параметр n относится к типу double[].

Следовательно, указывать этот параметр как n[] совсем не обязательно и даже недопустимо. И хотя его можно было бы явно указать как double[] n, это не дало бы в данном случае никаких преимуществ.

Интересное видео для нашей аудитории