Sobes.tech
Middle

Aký je rozdiel medzi výnimkami v Kotlin a Java?

sobes.tech AI

Odpoveď od AI

Hlavný rozdiel v spracovaní kontrolovaných (checked) výnimiek.

V Jave existujú dva typy výnimiek:

  • Kontrolované (Checked Exception): vyžadujú explicitné spracovanie v bloku try-catch alebo deklaráciu v signatúre metódy s kľúčovým slovom throws. Príklady: IOException, FileNotFoundException.
  • Nekontrolované (Unchecked Exception): nevyžadujú explicitné spracovanie. Príklady: RuntimeException a jej podtriedy, Error.

V Kotlin-e neexistujú kontrolované výnimky. Všetky výnimky v Kotlin-e sú v podstate nekontrolované. To zjednodušuje kód, pretože nie je potrebné používať try-catch alebo throws pri rutinných operáciách, ktoré môžu vyvolať výnimku.

Príklad v Jave:

// Java
public class FileRead {
    public void readFile() throws IOException { // Je povinné deklarovať
        BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        reader.close();
    }
}

Príklad v Kotlin-e:

// Kotlin
import java.io.File

fun readFile() { // Nie je potrebné deklarovať throws
    File("file.txt").forEachLine {
        println(it)
    }
}

Napriek absencii kontrolovaných výnimiek, Kotlin ich stále môže vyhadzovať a spracovávať (napríklad tie, ktoré sú vyhadzované z Java knižníc), pomocou blokov try-catch-finally. To sa robí pre kompatibilitu s existujúcim Java kódom.

// Kotlin
import java.io.IOException

fun readFileSafe() {
    try {
        readFile() // Volanie funkcie, ktorá môže vyhodiť IOException
    } catch (e: IOException) {
        println("Chyba pri čítaní súboru: ${e.message}")
    } finally {
        println("Operácia súboru ukončená.")
    }
}

Zhrnutie: Kotlin zjednodušuje vývoj tým, že odstraňuje potrebu povinného spracovania kontrolovaných výnimiek, viac sa spolieha na výnimky za behu a na štandardných správcov chýb tam, kde je to potrebné.