V čem spočívá rozdíl mezi výjimkami v Kotlinu a Javě?
sobes.tech AI
Odpověď od AI
Hlavní rozdíl v zacházení s kontrolovanými (checked) výjimkami.
V Javě existují dva typy výjimek:
- Kontrolované (Checked Exception): vyžadují explicitní ošetření v bloku
try-catchnebo deklaraci v signatuře metody klíčovým slovemthrows. Příklady:IOException,FileNotFoundException. - Nekontrolované (Unchecked Exception): nevyžadují explicitní ošetření. Příklady:
RuntimeExceptiona jeho podtřídy,Error.
V Kotlinu neexistují kontrolované výjimky. Všechny výjimky v Kotlinu jsou v podstatě nekontrolované. To zjednodušuje kód, protože není nutné používat try-catch nebo throws u rutinních operací, které mohou vyvolat výjimku.
Příklad v Javě:
// Java
public class FileRead {
public void readFile() throws IOException { // Je povinné deklarovat
BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
}
}
Příklad v Kotlinu:
// Kotlin
import java.io.File
fun readFile() { // Není třeba deklarovat throws
File("file.txt").forEachLine {
println(it)
}
}
Navzdory absenci kontrolovaných výjimek může Kotlin stále vyhazovat a zpracovávat výjimky (například ty, které jsou vyhazovány z Java knihoven), pomocí bloků try-catch-finally. To je pro kompatibilitu s existujícím Java kódem.
// Kotlin
import java.io.IOException
fun readFileSafe() {
try {
readFile() // Volání funkce, která může vyhodit IOException
} catch (e: IOException) {
println("Chyba při čtení souboru: ${e.message}")
} finally {
println("Operace souboru dokončena.")
}
}
Shrnutí: Kotlin usnadňuje vývoj tím, že odstraňuje nutnost povinného ošetření kontrolovaných výjimek, spoléhá více na výjimky za běhu a na standardní správce chyb tam, kde je to nutné.