Шаг 241.
Основы Kotlin.
Совместимость с Java. Исключения и совместимость

    На этом шаге мы рассмотрим совместимость исключений в Kotlin и Java.

    Герой научил монстра Jhava своему языку, и монстр теперь хочет пожать ему руку в знак дружбы... или нет. Добавим метод extendHandInFriendship() в Jhava.java.

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public class Jhava {
.   .   .   .

    public void offerFood() {
        Hero.handOverFood("pizza");
    }

    public void extendHandInFriendship() throws Exception {
        throw new Exception();
    }
}


Рис.1. Возбуждение исключения в Java (Hero.kt)

    Вызовем этот метод в Hero.kt.

@file:JvmName("Hero")

fun main(args: Array<String>) {
    .   .   .   .
    adversary.offerFood()

    adversary.extendHandInFriendship()
}

fun makeProclamation() = "Greetings, beast!"


Рис.2. Вызов метода, возбуждающего исключение (Hero.kt)

    Запустите этот код, и вы увидите, как во время выполнения возникнет исключение (рисунок 3). Ведь доверять монстру - не очень умно.


Рис.3. Возникновение исключения

    Вспомните, что в Kotlin все исключения непроверяемые. Вызывая extendHandInFriendship(), вы вызвали метод, генерирующий исключение. В этом случае вы точно знали, что так и будет. В других случаях может так не повезти. Стоит внимательно относиться к Java API, с которым вы взаимодействуете из Kotlin.

    Заключите вызов extendHandInFriendship() в блок try/catch, чтобы пресечь предательство монстра.

@file:JvmName("Hero")

fun main(args: Array<String>) {
    .   .   .   .
    adversary.offerFood()

    try {
        adversary.extendHandInFriendship()
    } catch (e: Exception) {
        println("Begone, foul beast!")
    }
}

fun makeProclamation() = "Greetings, beast!"
Файл с проектом можно взять здесь.


Рис.4. Обработка исключения в try/catch (Hero.kt)

    Запустите Hero.kt, чтобы увидеть, увернулся ли герой от подлой атаки монстра.


Рис.5. Результат работы приложения

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг