有一個非公開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這是不可能的。 – kosa 2012-03-23 18:07:11
請參閱http://stackoverflow.com/questions/5411434/how-to-call-a-superclass-method-using-java-reflection和http://stackoverflow.com/questions/2100412/java-reflection-accessing-方法與默認修飾符在超級類和http://stackoverflow.com/questions/9771933/invoking-super-class-method-without-its-instance-using-reflection一些想法 – CommonsWare 2012-03-23 18:10:05
是它是絕對有必要重寫該方法?爲什麼不調用你的方法'doSelectText()',然後使用反射來調用'selectText()'? – 2012-03-23 18:18:15