【发布时间】:2023-03-09 23:10:01
【问题描述】:
如果给你一个通用的 HashMap,你会如何找到它的键和值的类?
我有一个方法,它的定义是:
public <K, V> Map<K, V> getMap(final String name, Class<K> keyClass, Class<V> valueClass)
此方法可以访问一组通用映射,其键和值可以是任何对象类型,并且它返回具有相同名称(不重要)和相同类型类的映射。我尝试了两种方法:
1.
在我要返回的地图上创建一个迭代器,并检查条目的 getKey().getClass() 和 getValue().getClass() 哪个有效,除非地图为空,并且像这样的边缘情况完全不行。
- 尝试创建一个新的
Map<K,V> map = the map I'm checking it against,然后我会尝试捕获 ClassCastException,但它从未被抛出。我的猜测是这是更好的方法,但我遗漏了一些东西。
任何帮助将不胜感激,泛型不是我最好的 Java 主题
【问题讨论】:
-
泛型是一种编译时特性,一般来说,运行时类型不会记录实际的类型参数。通常,如果您以后需要静态类型,您希望避免忘记它们。保留您的 API,您可能希望将方法的所有三个参数设置为一个键 (
MyKey) 以在Map<MyKey,Map<?,?>>中使用。 -
我明白了,这更聪明,更容易实现,谢谢!
-
@TomHawtin-tackline 我建议对您的评论做出答复,以便可以将此问题标记为已解决。