Bu örneği düşünün (OOP kitaplarında tipik olan):
Bir Animal
sınıfım var, her birinin Animal
çok fazla arkadaşı olabilir.
Ve alt sınıflar gibi Dog
, Duck
, Mouse
vb gibi belirli davranış eklemek hangi bark()
, quack()
vb
İşte Animal
sı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ı?