我有一个带有默认方法的接口,以及两个实现该接口的类。其中一个类会覆盖默认方法,而另一个则不会。
interface MyType {
fun giveHello(): String = "Hello!"
}
class Polite: MyType {
// Does not override giveHello()
}
class Rude: MyType {
override fun giveHello(): String = "I don't like you"
}
我可以giveHello使用反射访问该方法,如下所示:
val methodOfPolite = Polite::class.java.getDeclaredMethod("giveHello")
val methodOfRude = Rude::class.java.getDeclaredMethod("giveHello")
这里有一件奇怪的事情。礼貌类不会重写该giveHello方法,但declaringClass该方法对象的 仍然指向Polite。
那么有没有一种方法可以检查该类是否确实覆盖了默认的接口方法?
我的用例看起来像这样(假设我们可以在名为 的属性中获得我所要求的行为isOverriden):
if (methodOfPolite.isOverriden) {
// do something
} else {
// do something else
}
慕哥9229398
饮歌长啸
相关分类