Есть ли простой способ проверить, реализуют ли два класса общий интерфейс? Я использую IntelliJ и вызываю библиотеку Java (Elastic Java High Level REST Client) из некоторого кода Kotlin.

Классы SearchHit и GetResponse имеют методы getId() и getSourceAsString(). Как я могу узнать, реализуют ли они общий интерфейс, чтобы я мог объединить свои функции, которые принимают эти объекты в качестве параметров?

Это мой код:

    fun JsonAdapter<Descriptor>.fromHit(hit: SearchHit): Descriptor {
        val descriptor = this.fromJson(hit.sourceAsString)
        if (descriptor == null) {
            throw BadFormatException("Json descriptorDeserializer returned a null value")
        }

        descriptor.descriptorId = hit.id
        return descriptor
    }

    fun JsonAdapter<Descriptor>.fromResponse(response: GetResponse): Descriptor {
        val descriptor = this.fromJson(response.sourceAsString)
        if (descriptor == null) {
            throw BadFormatException("Json descriptorDeserializer returned a null value")
        }

        descriptor.descriptorId = response.id
        return descriptor
    }

1
Gelineau 11 Апр 2019 в 10:21

2 ответа

Лучший ответ

Время выполнения

Вы можете попробовать ключевое слово is в Kotlin , чтобы проверить, является ли объект экземпляром некоторых интерфейсов :

if (obj is MyInterface) {...}

Что является котлинским эквивалентом Java :

if (obj instanceof MyInterface) {
    //...
}

Во время разработки

Во время разработки с Intellij Idea мы можем быстро проверить объявление classes, нажав Ctrl + B , когда курсор находится на имени класса.

1
Louis 11 Апр 2019 в 08:31

Если вы не знаете, какой интерфейс реализован вашими классами, вы можете использовать следующий код, чтобы получить список этих интерфейсов. Вы получите список классов, которые вы можете сравнить, и посмотрите, имеют ли ваши объекты общий интерфейс.

val obj = MyClass()   
var interfaces = obj.javaClass.interfaces
1
Jejefcgb 11 Апр 2019 в 08:27