繁体   English   中英

使用泛型的HashMap

[英]HashMap using Generics

我有:

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多个子abstract class

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

在这种情况下,如何使用HashMapGenerics

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

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

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

而不是用初始化

new HashMap<String, ?>();

您可以使用菱形推断:

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

在这种情况下,javacompiler会在构造函数本身中找出要写的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM