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