एक गैर सार्वजनिक एपीआई है जिसे मुझे एंड्रॉइड के वेबव्यू के साथ एक क्विर्क को काम करने के लिए ओवरराइड करने की आवश्यकता है।क्या मैं एक छिपी हुई (लेकिन सार्वजनिक) विधि को ओवरराइड कर सकता हूं और इसकी सुपर विधि कह सकता हूं?
एपीआई छिपा हुआ है, लेकिन यह सार्वजनिक है:
/**
* ...
*
* @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
देखें 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- कुछ विचारों के लिए प्रतिबिंब – CommonsWare
है विधि को ओवरराइड करना बिल्कुल जरूरी है? क्यों नहीं अपनी विधि 'doSelectText() 'को कॉल करें, और उसके बाद' selectText() 'को कॉल करने के लिए प्रतिबिंब का उपयोग करें? –