इस उदाहरण पर विचार करें (OOP पुस्तकों में विशिष्ट):
मेरे पास एक Animal
वर्ग है, जहां प्रत्येक के Animal
कई दोस्त हो सकते हैं।
और उपवर्गों की तरह Dog
, Duck
, Mouse
आदि जो की तरह विशिष्ट व्यवहार को जोड़ने bark()
, quack()
आदि
यहाँ Animal
वर्ग है:
public class Animal {
private Map<String,Animal> friends = new HashMap<>();
public void addFriend(String name, Animal animal){
friends.put(name,animal);
}
public Animal callFriend(String name){
return friends.get(name);
}
}
और यहाँ बहुत से टाइपकास्टिंग के साथ कुछ कोड स्निपेट है:
Mouse jerry = new Mouse();
jerry.addFriend("spike", new Dog());
jerry.addFriend("quacker", new Duck());
((Dog) jerry.callFriend("spike")).bark();
((Duck) jerry.callFriend("quacker")).quack();
क्या कोई ऐसा तरीका है जिससे मैं टाइपकास्ट से छुटकारा पाने के लिए रिटर्न प्रकार के लिए जेनरिक का उपयोग कर सकता हूं, ताकि मैं कह सकूं
jerry.callFriend("spike").bark();
jerry.callFriend("quacker").quack();
यहां कुछ प्रारंभिक कोड रिटर्न प्रकार के साथ एक पैरामीटर के रूप में विधि से अवगत कराया जाता है जो कभी उपयोग नहीं किया जाता है।
public<T extends Animal> T callFriend(String name, T unusedTypeObj){
return (T)friends.get(name);
}
क्या अतिरिक्त पैरामीटर का उपयोग किए बिना रनटाइम पर रिटर्न प्रकार का पता लगाने का एक तरीका है instanceof
? या कम से कम डमी उदाहरण के बजाय प्रकार के एक वर्ग को पास करके।
मैं समझता हूं कि जेनरिक संकलन समय-जाँच के लिए हैं, लेकिन क्या इसके लिए कोई समाधान है?