Розглянемо цей приклад (типовий для книг 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? Або, принаймні, передавши клас типу замість манекена.
Я розумію, що дженерики призначені для перевірки типу компіляції, але чи існує це рішення?