Zum Beispiel, ich habe nächste Klasse, mit beschränkten Typ Parametern:Java-Methode mit niedriger beschränkten (Super-) Typ
public class ItemContainer<T> {
void addItems(List<T> items);
}
und Verwendung in einer anderen Klasse mit dem Parameter:
public class ItemsGenerator<T> {
public void putItems() {
ItemContainer<? super T> itemContainer = getItemContainer();
List<? super T> items = getItems();
itemContainer.addItems(items); // compilation error!
}
}
Von meinem Verständnis Das Problem ist, dass es unbekannt ist, ob der erste (ItemContainer) generische Parameter derselbe wie der zweite (List) ist oder nicht. Die gute Lösung generic untere Grenze Art der Methode definieren könnte:
public <S super T> void putItems() {
ItemContainer<S> itemContainer = getItemContainer();
List<S> items = getItems();
itemContainer.addItems(items); // ok
}
Aber überraschenderweise (wie bei mir), gibt es keine solche Syntax ( slightly unconvincing reason)!
Gibt es eine Möglichkeit, dieses Problem zu lösen? Ich bin sicher, dass (in meinem Fall) der erste und der zweite Parameter identisch sein würden, aber ich weiß nicht, wie ich Java erklären soll.
Da der generische Typ Parameter von itemContainer und Elemente sollte der Super-Typ von T (im Klassenheader definiert) sein. –
@DenisDorohov: "der Super-Typ von T" Es gibt keine "der" Super-Typ von "T". '? Super T bedeutet, dass es ein beliebiger Typ sein kann, der ein Supertyp von "T" ist, einschließlich "T" selbst, "T" direkter Superklasse, der Superklasse dieser Klasse usw. (einschließlich aller implementierten Schnittstellen usw.) zu "Objekt". – newacct