我可以覆盖隐藏(但公共)方法并调用其超级方法吗?

cot*_*aws 11 java reflection android overriding

我需要覆盖一个非公共API,以便使用Android的WebView解决问题.

api是隐藏的,但它是公开的:

/**
 * ...
 *
 * @hide pending API council approval
 */
public boolean selectText() {
    ...
}
Run Code Online (Sandbox Code Playgroud)

所以我可以通过简单地在我自己的WebView类中声明它来覆盖它,减去@Override:

public boolean selectText() {
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

public boolean selectText() {
    return super.selectText();
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

反正有没有覆盖这个方法,并能够调用超级方法?

谢谢!

Kon*_*che 4

是否有办法重写此方法并能够调用超级方法?

不,不幸的是,正如问题如何使用 Java 反射调用超类方法的答案中所解释的那样,您无法通过反射解决此问题。