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