Sobes.tech
Middle

Koja je razlika između izuzetaka u Kotlinu i Javi?

sobes.tech АИ

Одговор од АИ

Основна разлика у обради проверених (checked) изузетака.

У Јави постоје два типа изузетака:

  • Проверени (Checked Exception): захтевају јасну обраду у блоку try-catch или декларацију у сигнатури метода са кључном речју throws. Примери: IOException, FileNotFoundException.
  • Непроверени (Unchecked Exception): не захтевају јасну обраду. Примери: RuntimeException и његове подкласе, Error.

У Kotlin-у нема проверених изузетака. Све изузетке у Kotlin-у су у суштини непроверени. Ово олакшава код, јер није потребно користити try-catch или throws за рутинске операције које могу изазвати изузетак.

Пример у Јави:

// Java
public class FileRead {
    public void readFile() throws IOException { // Обавезно декларација
        BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        reader.close();
    }
}

Пример у Kotlin-у:

// Kotlin
import java.io.File

fun readFile() { // Не треба декларација throws
    File("file.txt").forEachLine {
        println(it)
    }
}

Иако нема проверених изузетака, Kotlin и даље може да их баци и обради (као што су они које бацају Java библиотеке), користећи блокове try-catch-finally. Ово се ради ради компатибилности са постојећим Java кодом.

// Kotlin
import java.io.IOException

fun readFileSafe() {
    try {
        readFile() // Позив функције која може бацити IOException
    } catch (e: IOException) {
        println("Грешка при читању фајла: ${e.message}")
    } finally {
        println("Завршена операција са фајлом.")
    }
}

Резиме: Kotlin олакшава развој елиминисањем потребе за обавезним руковањем проверених изузетака, више се ослањајући на изузетке у време извршавања и стандардне механизме за обраду грешака тамо где је то потребно.