Как переопределить приватный метод - PullRequest
0 голосов
/ 04 ноября 2019

Я расширяю существующий класс Java, который имеет какой-то закрытый метод. И чтобы достичь того, чего я хочу, мне нужно переопределить этот закрытый метод.

Итак, я прочитал кое-что о рефлексии Java и получил следующее:

class CustomSlider : Slider() {
    init {
        Slider::class.java.getDeclaredMethod("drawTrack", Canvas::class.java, Int::class.java, Int::class.java).isAccessible = true
    }

    override fun drawTrack(canvas: Canvas, width: Int, top: Int) {
    }
}

Но о override line, я получаю сообщение об ошибке, что это невозможно.

Так как я могу это сделать?

Ответы [ 2 ]

4 голосов
/ 04 ноября 2019

не возможно переопределить частные методы, ни в Kotlin, ни в Java.

Отражение здесь не помогает. Закрытые методы отправляются статически, а не динамически, то есть правильная реализация выбирается во время компиляции, а не во время выполнения.

См. Также:

Чтобы «достичь того, что вы хотите», вы должны пойти другим путем - если APIвы используете предусмотренное расширение, оно, скорее всего, предложит это тем или иным способом.

1 голос
/ 04 ноября 2019

Я думаю, вам нужно изменить "частный" на "защищенный". Закрытые методы доступны внутри класса, в то время как защищенные методы доступны для класса и его дочерних элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...