【问题标题】:Can not put a T in Map<String, ? extends T>不能在 Map<String, 中放一个 T 吗?扩展 T>
【发布时间】:2020-08-27 10:10:38
【问题描述】:
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
}

将对象放入地图时出现错误:

Map 不适用于参数(String、DunzoShipment)

【问题讨论】:

  • 如果两个货件类都实现了相同的TrackingInterface,那么那里就不需要通配符了。

标签: java generics


【解决方案1】:
? extends TrackingInterface

表示“某事,它扩展了TrackingInterface”。我们不知道那个 something 是什么,所以我们不能确定 DunzoShipment 是其中之一。这就是为什么你不能插入到地图中。

PECS: producer extends, consumer super。这是一个消费者(通过put),所以你不能使用extends

只需删除? extends 部分,它就会编译。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 2011-02-02
    相关资源
    最近更新 更多