Как узнать, реализуют ли два класса общий интерфейс? - PullRequest
2 голосов
/ 11 апреля 2019

Есть ли простой способ проверить, реализуют ли два класса общий интерфейс?Я использую 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
    }

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

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

val obj = MyClass()   
var interfaces = obj.javaClass.interfaces
1 голос
/ 11 апреля 2019

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

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

if (obj is MyInterface) {...}

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

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

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

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

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