如何覆盖私有方法

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

那我该怎么做?

ningyaoaa 回答:如何覆盖私有方法

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

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

另请参阅:

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

,

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

本文链接:https://www.f2er.com/3167450.html

大家都在问