Java의 일반 반환 유형
Java에서 제네릭은 유형이 안전한 코드를 작성하기 위한 강력한 도구입니다. 그러나 일반 반환 유형 문제는 특히 다양한 동작을 갖는 클래스 계층 구조를 처리할 때 문제를 일으킬 수 있습니다. 이 기사에서는 문제를 살펴보고 명시적인 유형 변환이 필요하지 않도록 하는 솔루션을 제공합니다.
기본 클래스(예: Animal) 및 해당 하위 클래스(예: Dog, Duck, Mouse)로 작업할 때 문제가 발생합니다. 제공된 예제에서 기본 클래스 Animal은 Animal 객체를 반환하는 callFriend 메서드를 정의합니다. 그러나 실제로는 Dog의 경우 껍질(), Duck의 경우 quack()과 같이 하위 클래스에 특정한 메서드를 호출해야 할 수도 있습니다.
수동 유형 변환이 필요하지 않도록 일반 반환을 정의할 수 있습니다. callFriend 메소드에 대한 유형:
public <T extends Animal> T callFriend(String name) { return (T) friends.get(name); }
이 솔루션은 예상되는 반환 유형을 컴파일러에 전달하지만 사용되지 않는 매개변수 미사용 TypeObj를 도입합니다. 이 문제를 해결하기 위해 원하는 반환 유형을 나타내는 Class 객체를 허용하도록 메서드를 수정할 수 있습니다.
public <T extends Animal> T callFriend(String name, Class<T> type) { return type.cast(friends.get(name)); }
그런 다음 메서드를 호출하고 특정 하위 클래스를 인수로 제공할 수 있습니다.
jerry.callFriend("spike", Dog.class).bark(); jerry.callFriend("quacker", Duck.class).quack();
이 솔루션은 명시적인 유형 변환이 필요하지 않으며 코드의 유형 안전성을 향상시킵니다. 그러나 이 접근 방식을 사용하려면 컴파일러가 제공된 Class 객체가 Animal의 유효한 하위 클래스인지 확인해야 하므로 몇 가지 제한 사항이 적용될 수 있습니다. 그럼에도 불구하고 이는 Java에서 일반 반환 유형을 처리하는 유연하고 효과적인 방법을 제공합니다.
위 내용은 Java에서 일반 반환 유형을 사용하여 명시적 유형 캐스팅을 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!