Có một api không công khai mà tôi cần ghi đè để giải quyết sự lừa đảo với WebView của Android.Tôi có thể ghi đè lên một phương thức ẩn (nhưng công khai) và gọi phương thức siêu của nó không?
Các api ẩn nhưng nó là công cộng:
/**
* ...
*
* @hide pending API council approval
*/
public boolean selectText() {
...
}
Vì vậy, tôi có thể ghi đè lên nó bằng cách đơn giản tuyên bố nó trong lớp WebView của riêng tôi, trừ đi @ Override:
public boolean selectText() {
...
}
Có thể để gọi phương thức siêu từ ghi đè của tôi? Thông thường tôi có thể viết:
public boolean selectText() {
return super.selectText();
}
Nhưng phương pháp này bị ẩn, do đó, super.selectText()
không khả dụng. Nếu tôi sử dụng phản ánh:
public boolean selectText() {
return (Boolean) WebView.class.getMethod("selectText").invoke(this, (Object[]) null);
}
Tôi nhận được vòng lặp vô hạn vì nó gọi phương thức ghi đè của tôi.
Có cách nào để ghi đè phương thức này VÀ có thể gọi phương thức siêu không?
Cảm ơn!
Không. AFAIK nó là không thể. – kosa
Xem http://stackoverflow.com/questions/5411434/how-to-call-a-superclass-method-using-java-reflection và http://stackoverflow.com/questions/2100412/java-reflection-accessing- method-with-default-modifier-in-the-super-class và http://stackoverflow.com/questions/9771933/invoking-super-class-method-without-its-instance-using-reflection cho một số ý tưởng – CommonsWare
nó hoàn toàn cần thiết để ghi đè lên phương pháp? Tại sao không gọi phương thức 'doSelectText()' của bạn, và sau đó sử dụng sự phản chiếu để gọi 'selectText()'? –