Sobes.tech
Middle

Kuo skiriasi išimtys Kotlin ir Java?

sobes.tech AI

Atsakymas iš AI

Pagrindinis skirtumas apdorojant tikrinamus (checked) išimtis:

Java yra du išimčių tipus:

  • Tikrinamos (Checked Exception): reikalauja aiškiai apdoroti try-catch bloke arba nurodyti metodo paraše su throws raktiniu žodžiu. Pavyzdžiai: IOException, FileNotFoundException.
  • Ne tikrinamos (Unchecked Exception): nereikalauja aiškaus apdorojimo. Pavyzdžiai: RuntimeException ir jo pogrupiai, Error.

Kotlin nėra tikrinamų išimčių. Visos išimtys iš esmės yra ne tikrinamos. Tai supaprastina kodą, nes nereikia naudoti try-catch ar throws visur, kur gali būti išmetama išimtis:

Java pavyzdys:

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

Kotlin pavyzdys:

// Kotlin
import java.io.File

fun readFile() { // nereikia deklaruoti throws
    File("file.txt").forEachLine {
        println(it)
    }
}

Nepaisant to, kad nėra tikrinamų išimčių, Kotlin vis dar gali jas mesti ir apdoroti (kaip tas, kurios išmetamos iš Java bibliotekų), naudojant try-catch-finally blokus. Tai daroma tam, kad būtų suderinama su esamu Java kodu:

// Kotlin
import java.io.IOException

fun readFileSafe() {
    try {
        readFile() // Funkcijos, kuri gali mesti IOException, iškvietimas
    } catch (e: IOException) {
        println("Error reading file: ${e.message}")
    } finally {
        println("File operation finished.")
    }
}

Išvada: Kotlin palengvina kūrimą, pašalindamas būtinybę apdoroti tikrinamas išimtis, labiau pasikliaujant runtime išimtimis ir standartiniais klaidų tvarkytojais, kai to reikia.