为了解决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的回答所解释,您不能通过反射解决此问题.