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-catchbloke arba nurodyti metodo paraše suthrowsraktiniu žodžiu. Pavyzdžiai:IOException,FileNotFoundException. - Ne tikrinamos (Unchecked Exception): nereikalauja aiškaus apdorojimo. Pavyzdžiai:
RuntimeExceptionir 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.