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 중국어 웹사이트의 기타 관련 기사를 참조하세요!