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.