首頁  >  文章  >  Java  >  Java 函數中的泛型通配符:上限和下限

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

WBOY
WBOY原創
2024-04-25 16:18:02616瀏覽

在 Java 中,泛型通配符允許表示泛型類型,而不指定具體類型。上限通配符 (d203bb1ae585225d4838a2b7e3d0503e) 表示類型參數 T 或其任何子類,允許接受清單中的子類資料。下限通配符 (117c5a0bdb71ea9a9d0c2b99b03abe3e) 表示 T 或其任何超類,允許接受清單中的超類別資料。通配符可用於實現可調整大小的帶有泛型的數組列表,允許處理各種類型和進行新增/刪除操作。

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

Java 函數中的泛型通配符:上限與下限

在Java 中,我們可以使用萬用字元來表示泛型類型,允許我們在不指定具體類型的情況下使用泛型。本文將探討上限和下限通配符,並透過實戰案例展示其用法。

上限通配符

上限通配符(a7d86c54fd68a52918b9332a3353c71f) 表示類型參數T 或其任何子類。例如:

public static <T extends Number> double sum(List<T> numbers) {
  double total = 0;
  for (T num : numbers) {
    total += num.doubleValue();
  }
  return total;
}

此函數可以接受任何 Number (如 Integer、Double) 或其子類別的清單。我們可以安全地將任何滿足Number 約束的列表傳遞給此函數,如下所示:

List<Integer> ints = List.of(1, 2, 3);
double sumIntegers = sum(ints); // 编译通过

#下限通配符

##下限通配符(

117c5a0bdb71ea9a9d0c2b99b03abe3e) 表示類型參數T 或其任何超類別。例如:

public static <T super Number> void process(List<T> entities) {
  for (T entity : entities) {
    System.out.println(entity.getClass().getName());
  }
}

此函數可以接受任何 Number 的超類別 (如 Object、Serializable) 的清單。我們可以安全地將任何滿足Number 超類約束的列表傳遞給此函數,如下所示:

List<Object> objects = List.of("Hello", 123);
process(objects); // 编译通过

#實戰案例

考慮一個可調整大小的數組列表,我們可以使用泛型通配符來實現它:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ResizableArrayList<E> {

  private List<E> list;

  public ResizableArrayList() {
    this(new ArrayList<>());
  }

  public ResizableArrayList(List<? super E> initialList) {
    list = new ArrayList<>(initialList);
  }

  public void addAll(List<? extends E> elements) {
    list.addAll(elements);
  }

  public void removeAll(List<? super E> elements) {
    list.removeAll(elements);
  }

  public List<E> getList() {
    return list;
  }

  public static void main(String[] args) {
    ResizableArrayList<Integer> numbers = new ResizableArrayList<>(
        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]
  }
}

這個可調整大小的數組列表可以處理任何類型

E,允許我們向列表中添加或從中刪除各種物件。

以上是Java 函數中的泛型通配符:上限和下限的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn