如何重写私有方法

Pit*_*tel 0 reflection kotlin

我正在扩展现有的 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) {
    }
}
Run Code Online (Sandbox Code Playgroud)

但在线上override,我收到一条错误消息,表明这是不可能的。

那么我该怎么做呢?

The*_*tor 5

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

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

也可以看看:

为了“实现你想要的”,你应该走另一条路——如果你使用的 API 预见到扩展,它可能会以这样或那样的方式提供这种扩展。