在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/