제네릭을 사용하여 메서드 반환 유형의 유형 캐스팅 극복
객체 지향 프로그래밍에서는 상속을 사용하여 다양한 유형을 모델링하는 것이 일반적입니다. 공유된 특성을 지닌 객체. 각 동물이 다양한 친구를 가질 수 있는 Animal 클래스의 예를 생각해 보세요. 개, 오리, 쥐와 같은 각 동물 하위 클래스는 고유한 특정 동작을 추가합니다.
문제:
전통적인 접근 방식을 사용하여 동물 친구는 Animal 클래스를 활용하는 코드 조각에서 볼 수 있듯이 명시적인 유형 캐스팅이 필요합니다. 이 접근 방식은 번거로울 수 있으며 오류 가능성이 있습니다.
목표:
목표는 메서드 반환에 제네릭을 활용하여 유형 캐스팅의 필요성을 없애는 것입니다. 유형을 사용하여 원하는 동작에 직접 액세스할 수 있습니다.
해결 방법:
런타임 유형 검사에 대한 제네릭의 제한에도 불구하고 해결 방법이 있습니다. 일반 유형 매개변수 T를 사용하여 callFriend 메소드를 수정하는 방법은 다음과 같습니다.
public <T extends Animal> T callFriend(String name, Class<T> type) { return type.cast(friends.get(name)); }
사용법:
수정된 callFriend 메소드는 다음에서 호출할 수 있습니다. 방식:
jerry.callFriend("spike", Dog.class).bark(); jerry.callFriend("quacker", Duck.class).quack();
이점:
이 접근 방식은 유형 캐스팅을 제거하고 적절한 동작에 직접 액세스할 수 있게 해줍니다. 또한 컴파일러는 callFriend에 전달된 유형 인수가 Animal의 하위 유형인지 확인하여 안전성을 향상시킵니다.
제한 사항:
이 해결 방법은 유형을 해결하는 반면 캐스팅 문제의 경우 실제로 런타임 유형 검사를 시행하지 않는다는 점에 유의해야 합니다. 그럼에도 불구하고 유형이 잘 알려져 있고 정확한 캐스팅이 보장되는 시나리오에서는 여전히 유용한 솔루션입니다.
위 내용은 제네릭은 코드 안전성 향상을 위해 메소드 반환 유형에서 유형 캐스팅을 어떻게 제거할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!