java - 在 Java 中反射 map

标签 java multithreading reflection hashmap

Java ,具有共享存储:

final Map<String, Car> cars = (numberOfThreads == 1)
        ? new HashMap<String, Car>()
        : new ConcurrentHashMap<String, Car>();

然后在 run()线程 worker 类的方法我想同时将数据存储到 cars 中 map 。为此,我需要向下转换为适当的 HashMap 实例。我可以使用 if (numberOfThreads == 1)但我想有可能反射(reflect)cars对象 - 如何在这里使用 Java 反射 API?

我收到此错误:The method putIfAbsent(String, Car) is undefined for the type Map<String, Car>所以我不得不垂头丧气。

最佳答案

您问题的简单答案:

if (cars instanceof ConcurrentMap) {
    ((ConcurrentMap)cars).putIfAbsent(key, value);
}

但是,在 Java 8 中 Map interface now has putIfAbsent() ,因此如果您可以升级 JDK,则不需要此转换。

如果您不能使用 Java 8,我建议您始终使用 ConcurrentMap,因为这种 instanceof 代码不值得权衡。

无论如何,Java 反射 API 都不适合这种场景。

关于java - 在 Java 中反射 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28732927/

相关文章:

java - 检查更新/插入是否有错误 | MongoDB Java 驱动程序

node.js - 如何同步 Node 中的两个异步调用?

java - 为什么 Netty 使用反射将 sun.nio.ch.SelectorImpl 类中的成员替换为基于数组的集合?

java - 不同服务器中的 2 个应用程序实例之间共享数据库

java - Intent 不提取额外的

java - 将线程从 sleep 状态唤醒

Java 数组上的多线程(分割)

c# - 将动态对象列表读入 CSV

c# - Delegate.CreateDelegate - 方法参数不兼容

java - 如何在 Java 上使用 Selenium 获取全尺寸页面快照?