如何在Kotlin中检查Class<*>类型对象是否实现指定接口?
如何判断Class<*>类型的类是否实现指定接口
你直接用foo is someInterface得到false是因为foo本身是Class<*>类型的对象,它并不是你要检查的那个类的实例,自然不会匹配接口类型。下面是两种可行的检查方式:
方法1:使用isAssignableFrom(支持接口继承)
这是最可靠的方式,能处理目标接口是当前类间接实现的情况(比如当前类实现了子接口,子接口继承自目标接口):
// Kotlin反射写法 val implementsInterface = someInterface::class.isAssignableFrom(foo.kotlin) // Java反射写法(兼容更多场景) val implementsInterface = someInterface::class.java.isAssignableFrom(foo.java)
isAssignableFrom的逻辑是:如果调用方的Class对象是参数Class对象的父类型(包括接口、父类),就返回true。
方法2:直接检查已实现的接口列表
如果只需要判断当前类直接实现的接口中是否包含目标接口,可以用这种方式:
// Kotlin反射 val implementsInterface = foo.kotlin.interfaces.contains(someInterface::class) // Java反射 val implementsInterface = foo.interfaces.any { it == someInterface::class.java }
注意:这种方式不会处理接口继承的情况,如果目标接口是当前类实现的接口的父接口,会返回false。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

