我有一个interface dest和一些实现这个接口的类:
class destImpl1 implements dest { ... }
class destImpl2 implements dest { ... }
Run Code Online (Sandbox Code Playgroud)
然后我有一个HashMap<dest,double> destHash. 我想要的是destHash像这样实例化:
destHash = new HashMap<destImpl1,double>();
Run Code Online (Sandbox Code Playgroud)
然后像这样:
destHash = new HashMap<destImpl2,double>();
Run Code Online (Sandbox Code Playgroud)
但代码无法编译。我在这里缺少什么?
声明destHash为:
HashMap<? extends dest, Double> destHash
Run Code Online (Sandbox Code Playgroud)
这表示“AHashMap是K具有上限的未知类型dest”。
原因是即使Foo<Y>是 的子类型, 也不是 的子类型。然而,表示所有可能的泛型类型调用的集合,其中类型参数是 的子类型。有关更多详细信息,请参阅Java 教程 > 上限通配符Foo<X>YXFoo<? extends X>Foo<T>X
请注意,您需要使用包装类型Double而不是基元作为第二个类型参数。
评论:但是,如果您这样做,您可能无法实际使用它,HashMap因为您将无法将put键和值输入其中。这表明您的设计可能不正确(请参阅通配符使用指南)。