Sobes.tech
Middle

Mis vahe on Kotlin ja Java eranditel?

sobes.tech AI

Vastus AI-lt

Peamine erinevus kontrollitavate (checked) erandite töötlemisel:

Java-s on kaks tüüpi erandeid:

  • Kontrollitavad (Checked Exception): nõuavad selget töötlemist try-catch plokis või meetodi signatuuris throws sõnaga. Näited: IOException, FileNotFoundException.
  • Kontrollimata (Unchecked Exception): ei nõua selget töötlemist. Näited: RuntimeException ja selle alamklassid, Error.

Kotlin-is ei ole kontrollitavaid erandeid. Kõik erandid on põhimõtteliselt kontrollimata. See lihtsustab koodi, kuna ei ole vaja kasutada try-catch või throws igal pool, kus võib erand tekkida:

Java näide:

// Java
public class FileRead {
    public void readFile() throws IOException { // Nõutav deklareerimine
        BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        reader.close();
    }
}

Kotlin näide:

// Kotlin
import java.io.File

fun readFile() { // Ei ole vaja deklareerida throws
    File("file.txt").forEachLine {
        println(it)
    }
}

Hoolimata kontrollitavate erandite puudumisest, võib Kotlin neid endiselt visata ja töödelda (nagu Java teekidest visatud erandeid), kasutades try-catch-finally plokke. Seda tehakse olemasoleva Java-koodi ühilduvuse tagamiseks:

// Kotlin
import java.io.IOException

fun readFileSafe() {
    try {
        readFile() // Funktsioon, mis võib visata IOException
    } catch (e: IOException) {
        println("Error reading file: ${e.message}")
    } finally {
        println("File operation finished.")
    }
}

Kokkuvõte: Kotlin lihtsustab arendust, eemaldades vajaduse töötleda kontrollitavaid erandeid, rohkem tuginedes jooksuaegsetele eranditele ja standardsetele vigade töötlejatele, kui see on vajalik.