Java 按通用类型存储条件

标签 java generics type-erasure effective-java

我一直在阅读 Effective Java,并决定尝试将我学到的一些知识付诸实践。我正在尝试有效地创建一个 Multimap<?, Condition<?> >其中,键和值的通配符类型相同,但类型不同。

这是我正在看的书中的项目:Item 29

我并不想完全复制它。我意识到最大的不同是键并不直接代表链接中的值。在我的中,键代表值的通用类型。

所以我会做mmap.put(Class<Integer>, ConditionMapping<Integer>) 当我执行 get 时,我没有 ConditionMapping 的通用类型,所以我收到了未经检查的转换警告。

我有一个 get 方法,我想要签名 <T> List<Condition <T> >(Class<T> type)

由于类型删除,我唯一的选择是确保 condition.value 是类型 T 并构建一个新的对象列表吗?

我可以忽略未经检查的强制转换警告,但我只是尽量不这样做。有什么建议么?尖端?技巧?

最佳答案

没有办法表达这两个通配符应该捕获相同的类型。参见 this question对于类似的情况和一些可能的解决方案。

关于Java 按通用类型存储条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4194929/

相关文章:

java - 从流式 URL 读取 JSON 数据?

c# - 泛型和系统集合

swift - 如何创建符合具有嵌套 PAT 的协议(protocol)的类?

java - 带有 AMQP 的 Azure 服务总线 - 如何指定 session ID

JAVA : How get to the List<String>

Java 泛型的奇怪行为

Java 泛型类型删除 : when and what happens?

java - 泛型 collections.mixin 原始类型和泛型类型。 Integer -> String - 异常但 String -> Integer 效果很好

java - 如何使用 Fiddler 避免 JAVA 证书警告

c# - 如何从泛型函数返回 null?