> Java > java지도 시간 > 클래스를 확장하고 동시에 인터페이스를 구현하도록 Java 일반 클래스를 제한하려면 어떻게 해야 합니까?

클래스를 확장하고 동시에 인터페이스를 구현하도록 Java 일반 클래스를 제한하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2024-12-08 02:44:15
원래의
454명이 탐색했습니다.

How Can I Restrict a Java Generic Class to Extend a Class and Implement an Interface Simultaneously?

클래스와 인터페이스가 있는 Java 제네릭

Java에서 제네릭으로 작업할 때 특정 클래스를 확장하기 위해 제네릭 클래스의 유형을 제한해야 할 수도 있습니다. 클래스를 만들고 특정 인터페이스를 구현합니다. 다음 시도가 성공할 것이라고 예상하는 것이 합리적으로 보이지만:

Class<? extends ClassA>
로그인 후 복사
Class<? extends InterfaceB>
로그인 후 복사

안타깝게도 한 번에 하나만 적용할 수 있습니다. 그렇다면 두 가지 제한 사항을 어떻게 결합할 수 있습니까?

해결책: 다중 바인딩된 유형 매개변수

실제로 다음을 사용하여 여러 인터페이스를 지정하거나 일반 유형 매개변수에 클래스와 인터페이스를 지정하는 것이 가능합니다. "&":

<T extends ClassA & InterfaceB>
로그인 후 복사

이를 통해 지정된 클래스를 확장하고 지정된 클래스를 구현하는 것으로 제한되는 일반 유형을 정의할 수 있습니다. 인터페이스.

예를 들어 ClassB 클래스와 InterfaceC 인터페이스를 정의하면 다음과 같이 일반 클래스를 생성할 수 있습니다.

class MyClass<T extends ClassB & InterfaceC> {
    Class<T> variable;
}
로그인 후 복사

이렇게 하면 MyClass의 변수 필드가 ClassB를 확장하고 InterfaceC를 구현하는 클래스에 대한 참조를 보유합니다.

복잡성 및 호환성 고려 사항

이 기능은 일반 유형 정의에 유연성을 제공하지만 Collections#max의 JavaDoc 선언에서 볼 수 있듯이 복잡한 선언으로 이어질 수도 있습니다.

public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
로그인 후 복사

이러한 복잡성은 바이너리 호환성을 고려하여 발생합니다. 그러나 이러한 복잡성은 주로 일반 변수를 선언할 때가 아니라 일반 클래스나 메서드를 정의할 때 발생한다는 점에 유의하는 것이 중요합니다.

따라서 특정 클래스를 확장하고 클래스 개체를 생성하려는 목표를 달성하려면 특정 인터페이스를 구현하는 경우 다음 접근 방식을 사용할 수 있습니다.

class classB { }
interface interfaceC { }

public class MyClass<T extends classB & interfaceC> {
    T variable;
}
로그인 후 복사

이렇게 하면 MyClass의 변수 필드에 대해 원하는 제한이 제공됩니다.

위 내용은 클래스를 확장하고 동시에 인터페이스를 구현하도록 Java 일반 클래스를 제한하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿