其他分享
首页 > 其他分享> > 我可以重写一个隐藏的(但公共)方法并调用其超级方法吗?

我可以重写一个隐藏的(但公共)方法并调用其超级方法吗?

作者:互联网

为了解决Android WebView的怪癖,我需要重写一个非公共api.

该api是隐藏的,但它是公共的:

/**
 * ...
 *
 * @hide pending API council approval
 */
public boolean selectText() {
    ...
}

因此,可以通过在我自己的WebView类中声明它,而不是@Override来重写它:

public boolean selectText() {
    ...
}

是否可以从我的重写中调用super方法?通常我可以写:

public boolean selectText() {
    return super.selectText();
}

但是该方法是隐藏的,因此super.selectText()不可用.如果我使用反射:

public boolean selectText() {
    return (Boolean) WebView.class.getMethod("selectText").invoke(this, (Object[]) null);
}

我得到一个无限循环,因为它调用了我的重写方法.

无论如何,有否重写此方法并能够调用super方法?

谢谢!

解决方法:

Is there anyway to override this method AND be able to call the super
method?

不,不幸的是,正如对问题How to call a superclass method using Java reflection的回答所解释,您不能通过反射解决此问题.

标签:android,java,reflection,overriding
来源: https://codeday.me/bug/20191010/1886881.html