我有:
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}}?
答案 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将在构造函数方面找出要写的内容。