【问题标题】:How to find the Key/Value classes of a Hashmap (Java)如何查找 Hashmap (Java) 的键/值类
【发布时间】: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() 哪个有效,除非地图为空,并且像这样的边缘情况完全不行。

  1. 尝试创建一个新的Map<K,V> map = the map I'm checking it against,然后我会尝试捕获 ClassCastException,但它从未被抛出。我的猜测是这是更好的方法,但我遗漏了一些东西。

任何帮助将不胜感激,泛型不是我最好的 Java 主题

【问题讨论】:

  • 泛型是一种编译时特性,一般来说,运行时类型不会记录实际的类型参数。通常,如果您以后需要静态类型,您希望避免忘记它们。保留您的 API,您可能希望将方法的所有三个参数设置为一个键 (MyKey) 以在 Map<MyKey,Map<?,?>> 中使用。
  • 我明白了,这更聪明,更容易实现,谢谢!
  • @TomHawtin-tackline 我建议对您的评论做出答复,以便可以将此问题标记为已解决。

标签: java generics hashmap


【解决方案1】:

正如 Tom Hawtin 所说,解决此类运行时类型问题的最佳方法是从早期开始跟踪它。与其稍后尝试查找泛型的类,不如跟踪您使用的泛型及其类型,可能在 Map 中

【讨论】:

    猜你喜欢
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 2010-11-25
    • 2020-06-26
    • 1970-01-01
    相关资源
    最近更新 更多