Bu örneği düşünün (OOP kitaplarında tipik olan):
Bir Animalsınıfım var, her birinin Animalçok fazla arkadaşı olabilir.
Ve alt sınıflar gibi Dog, Duck, Mousevb gibi belirli davranış eklemek hangi bark(), quack()vb
İşte Animalsınıf:
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);
}
}
Ve burada çok sayıda daktilo içeren bazı kod snippet'i:
Mouse jerry = new Mouse();
jerry.addFriend("spike", new Dog());
jerry.addFriend("quacker", new Duck());
((Dog) jerry.callFriend("spike")).bark();
((Duck) jerry.callFriend("quacker")).quack();
Tipik yazımdan kurtulmak için dönüş türü için jenerik ilaçları kullanabilmemin herhangi bir yolu var mı?
jerry.callFriend("spike").bark();
jerry.callFriend("quacker").quack();
İşte hiç kullanılmayan bir parametre olarak yönteme aktarılan dönüş türüne sahip bazı başlangıç kodları.
public<T extends Animal> T callFriend(String name, T unusedTypeObj){
return (T)friends.get(name);
}
Ek parametre kullanmadan çalışma zamanında dönüş türünü anlamanın bir yolu var mı instanceof? Ya da en azından sahte bir örnek yerine bir tür sınıf geçirerek.
Jeneriklerin derleme zamanı türü denetimi için olduğunu anlıyorum, ancak bunun için bir çözüm var mı?