[英]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
。
在这种情况下,如何使用HashMap
和Generics
?
要点是?
当您要在变量中存储未知类型的集合时,泛型参数中的。 这称为协方差。
您需要一个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.