如何知道两个类是否实现一个公共接口?

时间:2019-04-11 07:21:22

标签: java oop elasticsearch kotlin

是否有一种简单的方法来检查两个类是否实现了公共接口? 我正在使用IntelliJ,并从一些Kotlin代码中调用Java库(Elastic Java High Level REST Client)。

SearchHitGetResponse类都具有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 个答案:

答案 0 :(得分:1)

运行时间

您可以尝试在科特林中使用is关键字来检查对象是否是某些接口的实例:

if (obj is MyInterface) {...}

Kotlin与 Java 类似:

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

开发期间

在使用Intellij Idea进行开发的过程中,当光标位于类名上时,我们可以通过按 Ctrl + B 快速检查classes声明。

答案 1 :(得分:1)

如果您不知道您的类实现了哪个接口,则可以使用以下代码获取这些接口的列表。您将获得一个可以比较的类列表,以查看您的对象是否共享一个公共接口。

val obj = MyClass()   
var interfaces = obj.javaClass.interfaces