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-catchalebo deklaráciu v signatúre metódy s kľúčovým slovomthrows. Príklady:IOException,FileNotFoundException. - Nekontrolované (Unchecked Exception): nevyžadujú explicitné spracovanie. Príklady:
RuntimeExceptiona 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é.