HashMap使用key作为通用接口

时间:2015-08-02 12:23:12

标签: java generics

我有一个interface dest和一些实现此接口的类:

class destImpl1 implements dest { ... } 
class destImpl2 implements dest { ... }

然后我有一个HashMap<dest,double> destHash。我想要的是如此实例化destHash

destHash = new HashMap<destImpl1,double>();

以后像这样:

destHash = new HashMap<destImpl2,double>();

但代码没有编译。我在这里错过了什么?

1 个答案:

答案 0 :(得分:4)

destHash声明为:

HashMap<? extends dest, Double> destHash

这表示&#34; A HashMap其中K是一个未知类型,其上限为dest&#34;。

原因是即使Foo<Y>Foo<X>的子类型,Y也不是X的子类型。但是Foo<? extends X>表示Foo<T>的所有可能的泛型类型调用的集合,其中type参数是X的子类型。有关详细信息,请参阅The Java Tutorials > Upper Bounded Wildcards

请注意,您需要使用包装类型Double而不是原语作为第二个类型参数。

评论:但是,如果您这样做,您可能无法真正使用HashMap,因为您无法put密钥和值。{这表明您的设计可能不正确(请参阅Guidelines for Wildcard Use