У меня есть интерфейс с методом по умолчанию и два класса, которые реализуют этот интерфейс.Один из классов переопределяет метод по умолчанию, а другой - нет.
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
}