इस उदाहरण पर विचार करें (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? या कम से कम डमी उदाहरण के बजाय प्रकार के एक वर्ग को पास करके।
मैं समझता हूं कि जेनरिक संकलन समय-जाँच के लिए हैं, लेकिन क्या इसके लिए कोई समाधान है?