如何覆盖私有方法

时间:2019-11-04 10:43:09

标签: kotlin reflection

我正在扩展具有某些私有方法的现有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行,我收到一个错误消息,那就是不可能。

那我该怎么做?

2 个答案:

答案 0 :(得分:4)

无论是在Kotlin还是Java中,都不可能不能覆盖私有方法。

反射在这里没有帮助。私有方法是静态分配的,而不是动态分配的-也就是说,在编译时而非运行时选择正确的实现。

另请参阅:

要“实现您想要的”,您应该走另一条路-如果您使用的API预见​​到扩展,它可能会以一种或另一种方式提供扩展。

答案 1 :(得分:1)

我认为您需要将“私有”更改为“受保护”。 内部可以使用私有方法,而该类及其子级可以使用受保护的方法。