如何比较类和接口?

编程入门 行业动态 更新时间:2024-10-24 06:33:41
本文介绍了如何比较类和接口?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

有人可以向我解释一下如何比较KClasse和接口吗?我知道如何检查类或接口是否相等,但我不明白如何检查A类是否是B类的超类,等等.

Can anybody explain me how to compare KClasse-s and interfaces among yourselves? I known how to check that classes or interfaces are equal but I don't understand how to check that A class is superclass of B class, etc.

interface IB {} interface IC : IB {} open class A {} open class B : A() {} open class C : B(), IC {} fun main(args: Array<String>) { if (B::class == B::class) { println("B class is equal to B class") } if (IB::class == IB::class) { println("IB interface is equal to IB interface") } if (A::class ??? B::class) { println("A class is parent of B class") } if (A::class ??? C::class) { println("A class is superclass of C class") } if (C::class ??? IC) { println("C class is implement IC interface") } if (IC ??? IB) { println("IC interface is implement IB interface") } }

推荐答案

Kotlin反射没有API来检索有关KClass层次结构的信息,因此检查一个KClass是该类的超类还是子类的唯一方法另一个KClass是比较对应的Java类:

Kotlin reflection doesn't have an API for retrieving information about KClass hierarchy, so the only way to check if one KClass is superclass or subclass of another KClass is to compare corresponding java classes:

interface IB {} interface IC : IB {} open class A {} open class B : A() {} open class C : B(), IC {} fun main(args: Array<String>) { if (B::class == B::class) { println("B class is equal to B class") } if (IB::class == IB::class) { println("IB interface is equal to IB interface") } if (A::class.java.isAssignableFrom(B::class.java)) { println("A class is parent of B class") } if (A::class.java.isAssignableFrom(C::class.java)) { println("A class is superclass of C class") } if (IC::class.java.isAssignableFrom(C::class.java)) { println("C class is implement IC interface") } if (IB::class.java.isAssignableFrom(IC::class.java)) { println("IC interface is implement IB interface") } }

更新: 您还可以定义两个扩展函数,这些函数会使这种检查变得更好:

UPDATE: You can also define two extension functions that will make this kind of checks a bit nicer:

inline fun <reified L : Any, reified R : Any> isSubClassOf(): Boolean { return R::class.java.isAssignableFrom(L::class.java) } inline fun <reified L : Any, reified R : Any> isSuperClassOf(): Boolean { return L::class.java.isAssignableFrom(R::class.java) } fun main(args: Array<String>) { if (isSubClassOf<B, B>()) { println("B class is equal to B class") } if (isSubClassOf<IB, IB>()) { println("IB interface is equal to IB interface") } if (isSuperClassOf<A, B>()) { println("A class is parent of B class") } if (isSuperClassOf<A, C>()) { println("A class is superclass of C class") } if (isSubClassOf<C, IC>()) { println("C class is implement IC interface") } if (isSubClassOf<IC, IB>()) { println("IC interface is implement IB interface") } }

更多推荐

如何比较类和接口?

本文发布于:2023-11-04 05:34:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1557086.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:接口

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!