Что означает объект: <ClassName>в Котлине? - PullRequest
0 голосов
/ 13 июня 2019

Я новичок в Котлине. Я пытаюсь конвертировать мой старый код Java в Kotlin. Когда я пытаюсь создать новый метод Handler и переопределить handleMessage (), я получил ответ по адресу: Как использовать Handler и handleMessage в Kotlin?

private val mHandler = object: Handler () {

override fun handleMessage(msg: Message?) {
    // Your logic code here.
}

}

Я не понимаю, что означает "объект:" и зачем нам это здесь? Когда я пытаюсь использовать val mHandler = Hander () {}, возникает ошибка, и я не могу переопределить handleMessage ()

1 Ответ

2 голосов
/ 13 июня 2019

Это просто способ Kotlin создать подкласс / реализовать анонимный класс и создать новый вместо него на месте.

Java:

//Define an interface (or a class):
public interface Runnable {
    void run();
}

//Create an anonymous class and instantiate it:
Runnable runnable = new Runnable() {
    @Override
    void run() {
        //Do something here
    }
}

Котлин:

//Define an interface (or a class):
interface Runnable {
    fun run()
}

//Create an anonymous class and instantiate it:
val runnable = object: Runnable() {
    override fun run() {
        //Do something here
    }
}

Если вы не пишете часть object:, это означает, что вы создаете экземпляр самого интерфейса / суперкласса. Что невозможно для интерфейсов и абстрактных классов. Кроме того, это синтаксическая ошибка иметь {} после () без object:.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...