使用泛型的HashMap

时间:2014-03-20 18:52:26

标签: java generics hashmap

我有:

protected Map<String, ? extends Transaction> transactions = new HashMap<String, ?>();

但是,我收到了编译错误:

Type mismatch: cannot convert from HashMap<String,?> to Map<String,? extends Transaction>

我尝试了一些变体,包括:

protected Map<String, ? extends Transaction> transactions = new HashMap<String, ? extends Transaction>();

所有产生相同的编译错误。

我的目标是拥有Report abstract class的实例(由许多不同类型的报告扩展),接受abstract class Transaction的多个子类。

进入扩展Report的单个实例的类型都属于同一类型,例如TRRReport extends Report需要接受TRRTransaction extends Transaction进入HashMap TDDReport extends Report但是,TDDTransaction extends Transaction需要接受HashMap HashMap

在这种情况下如何使用Generics和{{1}}?

2 个答案:

答案 0 :(得分:1)

泛型参数中?的要点是您希望在变量中存储未知类型的集合。这称为协方差。

您需要Transaction s的常规通用集合:

protected Map<String, Transaction> transactions = new HashMap<String, Transaction>();

答案 1 :(得分:0)

而不是用

初始化它
new HashMap<String, ?>();

您可以使用钻石推理:

protected Map<String, ? extends Transaction> transactions = new HashMap<>();

在这种情况下,javacompiler将在构造函数方面找出要写的内容。