Java Generics - Platzhalter mit niedrigerer Grenze
Das Fragezeichen (?), Das den Platzhalter darstellt, steht für einen unbekannten Typ in Generika. Es kann vorkommen, dass Sie die Arten von Typen einschränken möchten, die an einen Typparameter übergeben werden dürfen. Beispielsweise möchte eine Methode, die mit Zahlen arbeitet, möglicherweise nur Instanzen von Integer oder deren Oberklassen wie Number akzeptieren.
Um einen Wildcard-Parameter mit niedrigerer Grenze zu deklarieren, listen Sie das? Auf, gefolgt vom Schlüsselwort super, gefolgt von seiner unteren Grenze.
Beispiel
Das folgende Beispiel zeigt, wie Super verwendet wird, um einen Platzhalter für die untere Grenze anzugeben.
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.List;
public class GenericsTester {
public static void addCat(List<? super Cat> catList) {
catList.add(new RedCat());
System.out.println("Cat Added");
}
public static void main(String[] args) {
List<Animal> animalList= new ArrayList<Animal>();
List<Cat> catList= new ArrayList<Cat>();
List<RedCat> redCatList= new ArrayList<RedCat>();
List<Dog> dogList= new ArrayList<Dog>();
//add list of super class Animal of Cat class
addCat(animalList);
//add list of Cat class
addCat(catList);
//compile time error
//can not add list of subclass RedCat of Cat class
//addCat(redCatList);
//compile time error
//can not add list of subclass Dog of Superclass Animal of Cat class
//addCat.addMethod(dogList);
}
}
class Animal {}
class Cat extends Animal {}
class RedCat extends Cat {}
class Dog extends Animal {}
Dies führt zu folgendem Ergebnis:
Cat Added
Cat Added