2017-05-02 3 views
2
private List<? extends BaseModelBO> overAllItems = new ArrayList<>(); 

Ich versuche, eine weitere Liste desselben Typs hinzuzufügen.Liste eines generischen Typs zu einem anderen hinzufügen

List<? extends BaseModelBO> newList = getResponseList(webServiceResponse.getResponse()); 

if (newList != null && newList.size() > 0)    
    overAllItems.addAll(newList); 

versuchte auch List<AnyClassWhichExtendsBaseModelBO> es ..

wie

List<ContactBO> contactList = getContacts(); //where ContactBO extends BaseModelBO 

overAllItems.addAll(contactList); 

Fehlerprotokoll

addAll in List cannot be applied to java.util.List<capture<? extends BaseModelBO>> 

Siehe Fehler Bild

enter image description here

+0

versuchen Sie diese Liste overAllItems = new ArrayList (newList); – HourGlass

+0

* Ich versuche, eine weitere Liste desselben Typs hinzuzufügen. * Nicht wirklich. Der Platzhalter "?" Verweist auf einen unbekannten Typ, was bedeutet, dass "overAllItems" und "newList" auf verschiedene Unterklassen von "BaseModelBO" beschränkt sein können. Es gibt selten einen guten Grund, einer Platzhaltervariablen eine neue Sammlung zuzuweisen. – shmosel

Antwort

2

Dies wird durch den Compiler verursacht die richtige Art von ? extends BaseModelBO nicht kennt, so dass, wenn addAll der Compiler nicht wissen, was Typ ist da drin angewendet werden soll, und werfen Sie diese Kompilierungsfehler. so können Sie es gerne tun:

private List<BaseModelBO> overAllItems = new ArrayList<>(); 
-1

ändern Art von newList zu:

List newList = getResponseList(webServiceResponse.getResponse()); 

Jetzt Compiler gibt Warnung, dass Liste ist eine rohe Art, aber kein Fehler.

+0

Das ist ein schrecklicher Ratschlag. Die Warnung gibt es aus einem Grund. – shmosel

+0

Aber das wird funktionieren –

+0

Wenn Sie mit "arbeiten" meinen, "kompilieren, und explodieren, wenn Sie es am wenigsten erwarten". – shmosel

Verwandte Themen