Java java지도 시간 Java 함수의 일반 와일드카드: 상한 및 하한

Java 함수의 일반 와일드카드: 상한 및 하한

Apr 25, 2024 pm 04:18 PM
와일드카드 제네릭

Java에서는 일반 와일드카드를 사용하면 특정 유형을 지정하지 않고도 일반 유형을 나타낼 수 있습니다. 상한 와일드카드 문자(<? 확장 T>)는 유형 매개변수 T 또는 그 하위 클래스를 나타내므로 하위 클래스 데이터가 목록에서 허용될 수 있습니다. 하위 와일드카드 문자(&lt;? super T&gt;)는 T 또는 해당 수퍼클래스를 나타내며 목록의 수퍼클래스 데이터가 허용되도록 합니다. 와일드카드를 사용하면 제네릭으로 크기 조정 가능한 배열 목록을 구현하여 다양한 유형 및 추가/제거 작업을 처리할 수 있습니다.

Java 函数中的泛型通配符:上限和下限

Java 함수의 일반 와일드카드: 상한 및 하한

Java에서는 와일드카드를 사용하여 일반 유형을 나타낼 수 있으므로 구체적인 유형을 지정하지 않고도 제네릭을 사용할 수 있습니다. 이 기사에서는 상위 및 하위 와일드카드를 살펴보고 실제 예를 통해 사용법을 보여줍니다.

Capped 와일드카드

Capped 와일드카드(&lt;?extends T&gt;)는 유형 매개변수 T 또는 해당 하위 클래스를 나타냅니다. 예: &lt;? extends T&gt;) 表示类型参数 T 或其任何子类。例如:

1

2

3

4

5

6

7

public static &lt;T extends Number&gt; double sum(List&lt;T&gt; numbers) {

  double total = 0;

  for (T num : numbers) {

    total += num.doubleValue();

  }

  return total;

}

로그인 후 복사

此函数可以接受任何 Number (如 Integer、Double) 或其子类的列表。我们可以安全地将任何满足 Number 约束的列表传递给此函数,如下所示:

1

2

List&lt;Integer&gt; ints = List.of(1, 2, 3);

double sumIntegers = sum(ints); // 编译通过

로그인 후 복사

下限通配符

下限通配符 (&lt;? super T&gt;) 表示类型参数 T 或其任何超类。例如:

1

2

3

4

5

public static &lt;T super Number&gt; void process(List&lt;T&gt; entities) {

  for (T entity : entities) {

    System.out.println(entity.getClass().getName());

  }

}

로그인 후 복사

此函数可以接受任何 Number 的超类 (如 Object、Serializable) 的列表。我们可以安全地将任何满足 Number 超类约束的列表传递给此函数,如下所示:

1

2

List&lt;Object&gt; objects = List.of(&quot;Hello&quot;, 123);

process(objects); // 编译通过

로그인 후 복사

实战案例

考虑一个可调整大小的数组列表,我们可以使用泛型通配符来实现它:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

 

public class ResizableArrayList&lt;E&gt; {

 

  private List&lt;E&gt; list;

 

  public ResizableArrayList() {

    this(new ArrayList&lt;&gt;());

  }

 

  public ResizableArrayList(List&lt;? super E&gt; initialList) {

    list = new ArrayList&lt;&gt;(initialList);

  }

 

  public void addAll(List&lt;? extends E&gt; elements) {

    list.addAll(elements);

  }

 

  public void removeAll(List&lt;? super E&gt; elements) {

    list.removeAll(elements);

  }

 

  public List&lt;E&gt; getList() {

    return list;

  }

 

  public static void main(String[] args) {

    ResizableArrayList&lt;Integer&gt; numbers = new ResizableArrayList&lt;&gt;(

        Arrays.asList(1, 2, 3)

    );

    numbers.addAll(Arrays.asList(4, 5, 6));

    numbers.removeAll(Arrays.asList(2, 3));

 

    System.out.println(numbers.getList()); // [1, 4, 5, 6]

  }

}

로그인 후 복사

这个可调整大小的数组列表可以处理任何类型 Errreee

이 함수는 모든 숫자(예: Integer, Double) 또는 해당 하위 클래스 목록을 허용할 수 있습니다. 다음과 같이 숫자 제약 조건을 충족하는 모든 목록을 이 함수에 안전하게 전달할 수 있습니다. 🎜rrreee🎜🎜Lower wildcard🎜🎜🎜Lower wildcard(&lt;? super T&gt;)는 유형 매개변수를 나타냅니다. T 또는 해당 슈퍼클래스. 예: 🎜rrreee🎜이 함수는 모든 Number 슈퍼클래스(예: Object, Serialize) 목록을 허용할 수 있습니다. 다음과 같이 Number 슈퍼클래스 제약 조건을 충족하는 모든 목록을 이 함수에 안전하게 전달할 수 있습니다. 🎜rrreee🎜🎜 실제 예 🎜🎜🎜 크기 조정 가능한 배열 목록을 고려하면 일반 와일드카드를 사용하여 이를 달성할 수 있습니다. 🎜rrreee🎜이 크기 조정 가능한 배열 목록은 다음과 같이 할 수 있습니다. 모든 유형의E를 처리하여 목록에 다양한 개체를 추가하거나 제거할 수 있습니다. 🎜

위 내용은 Java 함수의 일반 와일드카드: 상한 및 하한의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

일반 함수가 Golang의 가변 매개변수 유형 문제를 해결합니까? 일반 함수가 Golang의 가변 매개변수 유형 문제를 해결합니까? Apr 16, 2024 pm 06:12 PM

일반 함수가 Golang의 가변 매개변수 유형 문제를 해결합니까?

Golang에서 제네릭의 장점과 용도를 살펴보세요. Golang에서 제네릭의 장점과 용도를 살펴보세요. Apr 03, 2024 pm 02:03 PM

Golang에서 제네릭의 장점과 용도를 살펴보세요.

Java 함수 제네릭의 상한과 하한은 무엇입니까? 사용하는 방법? Java 함수 제네릭의 상한과 하한은 무엇입니까? 사용하는 방법? Apr 26, 2024 am 11:45 AM

Java 함수 제네릭의 상한과 하한은 무엇입니까? 사용하는 방법?

Android 개발에 Java 제네릭 적용 Android 개발에 Java 제네릭 적용 Apr 12, 2024 pm 01:54 PM

Android 개발에 Java 제네릭 적용

golang의 제네릭의 특정 애플리케이션 시나리오 golang의 제네릭의 특정 애플리케이션 시나리오 May 04, 2024 am 11:45 AM

golang의 제네릭의 특정 애플리케이션 시나리오

Java 일반 메소드에서 유형 매개변수를 제한하는 방법은 무엇입니까? Java 일반 메소드에서 유형 매개변수를 제한하는 방법은 무엇입니까? Apr 30, 2024 pm 01:30 PM

Java 일반 메소드에서 유형 매개변수를 제한하는 방법은 무엇입니까?

Golang의 일반 함수에는 어떤 제한이 있나요? Golang의 일반 함수에는 어떤 제한이 있나요? Apr 16, 2024 pm 05:12 PM

Golang의 일반 함수에는 어떤 제한이 있나요?

Golang 제네릭이 함수 서명 및 매개변수에 미치는 영향은 무엇입니까? Golang 제네릭이 함수 서명 및 매개변수에 미치는 영향은 무엇입니까? Apr 17, 2024 am 08:39 AM

Golang 제네릭이 함수 서명 및 매개변수에 미치는 영향은 무엇입니까?

See all articles