Java:
// Обязательно обработать или пробросить
public void readFile() throws IOException {
Files.readAllBytes(Paths.get("file.txt"));
}
Kotlin:
fun readFile() {
Files.readBytes(Paths.get("file.txt")) // Не требует объявления throws
}
Что изменилось:
Kotlin:
val result = try {
"123".toInt()
} catch (e: NumberFormatException) {
null
}
Преимущества:
Kotlin предоставляет стандартные функции:
val number = "123".toIntOrNull() // Возвращает null вместо исключения
val length = nullableString?.length ?: 0 // Elvis-оператор
Аналоги в Java:
Integer number = null;
try {
number = Integer.parseInt("123");
} catch (NumberFormatException e) {
// Обработка
}
Kotlin 1.3+:
fun parseNumber(text: String): Result<Int> = runCatching {
text.toInt()
}
// Использование:
parseNumber("123")
.onSuccess { println(it) }
.onFailure { println("Error: ${it.message}") }
Особенности:
Идиоматичный Kotlin:
fun handleError(e: Exception) = when(e) {
is IOException -> println("IO error")
is IllegalArgumentException -> println("Invalid argument")
else -> throw e // Переброс непредвиденных исключений
}
Kotlin:
viewModelScope.launch {
val result = try {
repository.loadData()
} catch (e: Exception) {
ErrorState(e.message)
}
_state.value = result
}
Преимущества:
Kotlin предлагает более гибкую систему обработки ошибок с акцентом на null-безопасность, функциональные подходы (Result тип) и уменьшение шаблонного кода. Однако это требует от разработчика большей сознательности при проектировании обработки ошибок по сравнению с Java.