在 Java 中反映贴图

Reflect Map in Java

Java,共享存储:

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

然后在线程工作者的 run() 方法中 class 我想同时将数据存储到 cars 映射中。为此,我需要向下转换为适当的哈希图实例。我可以使用 if (numberOfThreads == 1) 但我想它可以反射 cars 对象 - 我如何在这里使用 Java 反射 API?

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

不用downcast,直接用Map put方法即可,其他什么都不用做。

既然问题改了,是的,没有putIfAbsent方法。没有看到代码,只能猜测。

最后你确定需要putIfAbsent吗,同一个车放两次会不会有问题?

您问题的简单答案:

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

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

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

无论如何,Java 反射 API 不适合这种情况。