Heim > Java > javaLernprogramm > Generische Platzhalter in Java-Funktionen: Ober- und Untergrenzen

Generische Platzhalter in Java-Funktionen: Ober- und Untergrenzen

WBOY
Freigeben: 2024-04-25 16:18:02
Original
698 Leute haben es durchsucht

In Java ermöglichen generische Platzhalter die Darstellung generischer Typen ohne Angabe spezifischer Typen. Das obere Platzhalterzeichen (<? erweitert T>) stellt einen Typparameter T oder eine beliebige Unterklasse davon dar und ermöglicht die Aufnahme von Unterklassendaten in eine Liste. Das untere Platzhalterzeichen (<? super T>) stellt T oder eine seiner Superklassen dar, sodass die Superklassendaten in der Liste akzeptiert werden können. Platzhalter können verwendet werden, um in der Größe veränderbare Array-Listen mit Generika zu implementieren, was die Handhabung verschiedener Typen und Hinzufügungs-/Entfernungsvorgänge ermöglicht.

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

Generische Wildcards in Java-Funktionen: Ober- und Untergrenzen

In Java können wir Wildcards verwenden, um generische Typen darzustellen, sodass wir Generics verwenden können, ohne einen konkreten Typ anzugeben. In diesem Artikel werden obere und untere Platzhalter untersucht und ihre Verwendung anhand praktischer Beispiele demonstriert.

Capped Wildcard

Capped Wildcard (<? erweitert T>) repräsentiert einen Typparameter T oder eine seiner Unterklassen. Zum Beispiel: <? extends T>) 表示类型参数 T 或其任何子类。例如:

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

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

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

下限通配符

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

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

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

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

实战案例

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

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]
  }
}
Nach dem Login kopieren

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

Diese Funktion kann jede Zahl (z. B. Integer, Double) oder eine Liste ihrer Unterklassen akzeptieren. Wir können jede Liste, die die Nummernbeschränkung erfüllt, sicher wie folgt an diese Funktion übergeben: 🎜rrreee🎜🎜Unterer Platzhalter🎜🎜🎜Unterer Platzhalter (<? super T>) stellt einen Typparameter dar T oder eine seiner Superklassen. Zum Beispiel: 🎜rrreee🎜Diese Funktion kann eine Liste jeder Number-Superklasse (z. B. Object, Serializable) akzeptieren. Wir können jede Liste, die die Einschränkungen der Number-Superklasse erfüllt, sicher wie folgt an diese Funktion übergeben: 🎜rrreee🎜🎜 Praktisches Beispiel 🎜🎜🎜 Betrachten Sie eine skalierbare Array-Liste. Wir können generische Platzhalter verwenden, um dies zu erreichen: 🎜rrreee🎜Diese skalierbare Array-Liste kann Behandeln Sie jeden Typ E, sodass wir verschiedene Objekte zur Liste hinzufügen oder daraus entfernen können. 🎜

Das obige ist der detaillierte Inhalt vonGenerische Platzhalter in Java-Funktionen: Ober- und Untergrenzen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage