Impossible de mettre un T dans Map <String,? étend 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
}

en plaçant l'objet dans la carte, j'obtiens une erreur:

La méthode met (String, capture # 1-of? Extend TrackingInterface) dans le type Map <String, capture # 1-of? étend TrackingInterface> n'est pas applicable pour les arguments (String, DunzoShipment)

Réponses

2 Michael Aug 27 2020 at 10:24
? extends TrackingInterface

signifie " quelque chose qui s'étend TrackingInterface". Nous ne savons pas ce qu'est ce quelque chose , nous ne pouvons donc pas être sûrs que DunzoShipmentc'est l'un d'entre eux. C'est pourquoi vous ne pouvez pas insérer dans la carte.

PECS: producteur étend, consommateur super . Ceci est un consommateur (via put), vous ne pouvez donc pas utiliser extends.

Retirez simplement la ? extendspièce et elle se compilera.