>Java >java지도 시간 >Java Generics에서 클래스 경계와 인터페이스 경계를 ​​어떻게 결합할 수 있습니까?

Java Generics에서 클래스 경계와 인터페이스 경계를 ​​어떻게 결합할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-05 22:58:10501검색

How Can I Combine Class and Interface Bounds in Java Generics?

Java Generics: 클래스와 인터페이스 경계 결합

Java에서 Generics는 다양한 유형의 객체에서 작동할 수 있는 유형을 정의하는 기능을 제공합니다. . 특정 인터페이스를 구현하면서 특정 클래스를 확장하도록 제한되는 클래스 객체를 생성하려고 할 때 일반적인 문제가 발생합니다.

클래스를 생성하려는 사용 사례를 고려해 보겠습니다. ClassA를 확장하고 InterfaceB를 구현하는 클래스를 나타내는 객체 인터페이스.

둘 다 할 수는 없나요?

처음에는 다음 와일드카드를 사용해 볼 수 있습니다.

Class<? extends ClassA>

또는

Class<? extends InterfaceB>

그러나 둘 중 하나를 사용한다고 해서 두 요구 사항을 동시에 시행할 수는 없습니다.

A 해결 방법

이를 달성하는 열쇠는 와일드카드에 여러 경계를 사용하는 것입니다. 이러한 와일드카드의 구문은 다음과 같습니다.

<T extends Class & Interface>

이를 시나리오에 적용하면 다음과 같은 결과를 얻을 수 있습니다.

Class<? extends ClassA & InterfaceB>

제한된 유형 매개변수

Java Generics에 설명된 대로 자습서에서는 여러 범위를 사용하여 유형 매개변수가 지정된 클래스를 확장하고 하나 이상의 인터페이스를 구현해야 함을 지정할 수 있습니다. & 연산자를 사용하면 경계가 구분됩니다.

복잡한 예

이 솔루션을 사용하면 목표를 달성할 수 있지만 복잡해질 수 있습니다. 예를 들어, 다음 선언이 있는 Java의 Collections#max 메소드를 생각해 보세요.

public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)

이 정교한 구문은 특정 유형 제약 조건을 적용하면서 바이너리 호환성을 보장합니다.

일반 클래스 사용

사용 사례에 따라 원하는 클래스를 사용하여 일반 클래스를 만들 수 있습니다. 경계:

public class MyClass<T extends ClassA & InterfaceB> {
    Class<T> variable;
}

이 접근 방식을 사용하면 다음과 같이 원하는 제한 사항이 있는 변수를 만들 수 있습니다.

MyClass<ClassB>.variable

위 내용은 Java Generics에서 클래스 경계와 인터페이스 경계를 ​​어떻게 결합할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.