चलें कहते हैं कि मैं इन दो वर्गों है, एक अन्यडेवलपर को चेतावनी `कॉल करने के लिए super.foo()` जावा में
public class Bar{
public void foo(){
}
}
public class FooBar extends Bar {
@Override
public void foo(){
super.foo(); //<-- Line in question
}
}
विस्तार मुझे क्या करना चाहते हैं उपयोगकर्ता चेतावनी देने के कॉल करने के लिए है सुपर वर्ग के विधि foo
यदि वे ओवरराइड विधि में नहीं हैं, तो क्या यह संभव है?
या प्रतिबिंब का उपयोग करके जानने का कोई तरीका है कि एक विधि जो सुपर-क्लास की विधि को ओवरराइड करती है, यदि मैं क्लास प्रकार को सुपर पर पास करता हूं तो मूल विधि को कॉल करता है?
उदाहरण के लिए:
public abstract class Bar{
public Bar(Class<? extends Bar> cls){
Object instance = getInstance();
if (!instance.getClass().equals(cls)) {
throw new EntityException("The instance given does not match the class given.");
}
//Find the method here if it has been overriden then throw an exception
//If the super method isn't being called in that method
}
public abstract Object getInstance();
public void foo(){
}
}
public class FooBar extends Bar {
public FooBar(){
super(FooBar.class);
}
@Override
public Object getInstance(){
return this;
}
@Override
public void foo(){
super.foo();
}
}
हो सकता है कि किसी टिप्पणी मैं सुपर विधि पर डाल सकते हैं तो यह पता चलता है कि यह कॉल किया जाना चाहिए?
संपादित
ध्यान दें, इसके नहीं सुपर वर्ग foo विधि कॉल करने की जरूरत है कि, यह किसी को उप वर्ग के foo विधि बुला, उदाहरण के लिए एक डेटाबेस close
तरीका होगा
अगर यह नीचे आ गया तो मैं विधि को "अन-ओवरराइड करने योग्य" बनाने से भी खुश रहूंगा, लेकिन फिर भी इसे एक कस्टम संदेश देना चाहूंगा।
लेकिन यह अभी भी ऊपर है, या यहां तक कि उन्हें एक देने के लिए अच्छा होगा:
संपादित 2
यह यहाँ क्या मुझे इस तरह से करना चाहता था है कुछ और करने के लिए कस्टम संदेश, Cannot override the final method from Bar, please call it from your implementation of the method instead
कर टाल नहीं सकते
foo विधि सुपर क्लास में 'अंतिम' बनाया की तरह कुछ है विश्लेषण उपकरण/नियम परीक्षक (जैसे आईडीईए)। यह रनटाइम पर नहीं किया जाना चाहिए (उदाहरण के लिए प्रतिबिंब के साथ)। – user2864740
यदि आप टेम्पलेट पैटर्न का उपयोग नहीं कर सकते हैं, तो FindBugs में एक एनोटेशन है जो अनुपलब्ध ओवरराइड का पता लगाता है: [ओवरराइड मस्तइनवोक] (http://findbugs.sourceforge.net/manual/annotations.html) –
* मैं भी इसे बनाने से खुश हूं विधि "अन-ओवरराइड करने योग्य" *: यही 'अंतिम' के लिए है। –