java - 使用泛型的 HashMap

标签 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 .

我如何使用HashMapGenerics在这种情况下?

最佳答案

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

您想要一个常规的通用交易集合:

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

关于java - 使用泛型的 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22542487/

相关文章:

java - 在 springboot 中创建名为 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration 的 bean 时出错

Java:在 zipper 内搜索 zipper

java - ArrayList 类型不是通用的;它不能用参数 <Integer> 参数化

c# - 没有从 'System.Collections.Generic.List<T>' 到 'T' 的隐式引用转换

java - 在 Collection View 中迭代 HashMap

java - 我的 Python-Java 接口(interface),好的设计?以及如何包装 JNI 函数?

java - 异常: Operation not allowed after ResultSet closed while fetching value from two table

java - 如何使用泛型并从父类继承而不引起名称冲突?

java - Java HashMap 会产生死锁吗?

rust - 迭代器表示任意行为