메소드에서 generic한 타입으로 반환하려면 어떻게해야하나요.
조회수 7188회
OOP책에서 밑에 같은 예제를 보자면
Animal 클래스가 있으면 각 animal은 여러 친구를 가지고 있습니다. 그리고 하위 클래스로는 Dog,Duck,Mouse 등이 있습니다. 얘네는 각자 bark(), quack() 같은 울음 소리를 냅니다.
소스코드
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같은거 안쓰고 위에처럼 제네릭한 타입을 반환할수는 없나요?
댓글 입력