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.