Kann kein T in Map <String setzen? erweitert T>
Aug 27 2020
private static final Map<String, ? extends TrackingInterface<TrackResponseObject>> map = new HashMap<>();
static {
map.put("dunzo", new DunzoShipment());
map.put("self", new SelfShipment());
}
public class DunzoShipment implements TrackingInterface<TrackResponseObject>,java.util.function.Supplier<TrackingInterface<TrackResponseObject>> {
//body
}
Beim Einfügen des Objekts in die Karte wird eine Fehlermeldung angezeigt:
Die Methode put (String, Capture # 1-of? Erweitert TrackingInterface) in den Typ Map <String, Capture # 1-of? erweitert TrackingInterface> gilt nicht für die Argumente (String, DunzoShipment)
Antworten
2 Michael Aug 27 2020 at 10:24
? extends TrackingInterface
bedeutet " etwas, das sich ausdehnt TrackingInterface". Wir wissen nicht , was das etwas ist, so dass wir nicht sicher sein können , dass DunzoShipmenteiner von ihnen ist. Deshalb können Sie nicht in die Karte einfügen.
PECS: Produzent erweitert, Konsument super . Dies ist ein Verbraucher (via put), daher können Sie ihn nicht verwenden extends.
Entfernen Sie einfach das ? extendsTeil und es wird kompiliert.