【发布时间】:2012-04-08 07:34:00
【问题描述】:
我需要重写一个非公共 api 以解决 Android 的 WebView 的一个怪癖。
api是隐藏的,但它是公开的:
/**
* ...
*
* @hide pending API council approval
*/
public boolean selectText() {
...
}
所以我可以通过简单地在我自己的 WebView 类中声明它来覆盖它,减去 @Override:
public boolean selectText() {
...
}
是否可以从我的覆盖中调用超级方法?通常我可以写:
public boolean selectText() {
return super.selectText();
}
但是方法是隐藏的,所以super.selectText()不可用。如果我使用反射:
public boolean selectText() {
return (Boolean) WebView.class.getMethod("selectText").invoke(this, (Object[]) null);
}
我得到一个无限循环,因为它调用了我的重写方法。
有没有办法重写这个方法并且能够调用超级方法?
谢谢!
【问题讨论】:
-
不。 AFAIK 这是不可能的。
-
是否绝对有必要重写该方法?为什么不调用你的方法
doSelectText(),然后使用反射调用selectText()?
标签: java android reflection overriding