Я обновился до Java 8 и попытался заменить простую итерацию с помощью Map с новым выражением lamdba. Цикл ищет нулевые значения и генерирует исключение, если оно найдено. Старый код Java 7 выглядит следующим образом:
for (Map.Entry<String, String> entry : myMap.entrySet()) {
if(entry.getValue() == null) {
throw new MyException("Key '" + entry.getKey() + "' not found!");
}
}
И моя попытка конвертировать это в Java 8 выглядит так:
myMap.forEach((k,v) -> {
if(v == null) {
// OK
System.out.println("Key '" + k+ "' not found!");
// NOK! Unhandled exception type!
throw new MyException("Key '" + k + "' not found!");
}
});
Может ли кто-нибудь объяснить, почему оператор throw
здесь не разрешен и как это можно исправить?
Предложение быстрого исправления Eclipse не подходит для меня... оно просто окружает оператор throw
блоком try-catch
:
myMap.forEach((k,v) -> {
if(v == null) {
try {
throw new MyException("Key '" + k + "' not found!");
}
catch (Exception e) {
e.printStackTrace();
}
}
});