我有:
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
在这种情况下?
最佳答案
泛型参数中 ?
的要点是当您想要在变量中存储未知类型的集合时。这称为协方差。
您想要一个常规的通用交易
集合:
protected Map<String, Transaction> transactions = new HashMap<String, Transaction>();
关于java - 使用泛型的 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22542487/