이 예를 고려하십시오 (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있습니까? 또는 적어도 더미 인스턴스 대신 유형의 클래스를 전달하여.
제네릭이 컴파일 타임 유형 검사를위한 것임을 이해하지만 이에 대한 해결 방법이 있습니까?