java - 无法通过 Java 8 上的反射调用 HashMap 的 getEntry

标签 java reflection java-8

我有一些遗留代码(使用 JDK 7u55 编译并成功运行)类似于以下内容:

private static class MyHashMap extends HashMap {
    static Method getEntryMethod;

    static {
        try {
            getEntryMethod = HashMap.class.getDeclaredMethod("getEntry", Object.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

public static void main(String[] args) {
    MyHashMap myHashMap = new MyHashMap();
}

尝试切换到 JDK 8u31 后,它失败了:

java.lang.NoSuchMethodException: java.util.HashMap.getEntry(java.lang.Object)

最佳答案

getEntry() 从来都不是 HashMap 类的公共(public) API 的一部分。看起来它在 Java 8 中发生了变化。这就是为什么您应该只依赖已发布的类的公共(public) API。

关于java - 无法通过 Java 8 上的反射调用 HashMap 的 getEntry,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28543192/

相关文章:

java - 要在我的 Java 项目中使用外部开源库,我需要做什么?

scala - 如何匹配 "boolean"类型和 "Boolean"类型的类?

java - Reduce for parallel stream without combiner 由多个线程正确执行。在这种情况下我什么时候应该使用组合器?

java - "Good"使用 Stream API 对每个对象调用方法的方法

java - getNameCount() 实际上算什么?

java - 是否可以合并这两个查询?

java - `Java 8 in Action` 提供的demo有错吗?

java - 如何使用反射/自省(introspection)来维护程序?

java - 如何将内存中生成的类转储到文件

java-8 - 无需使用终端操作即可知道流的大小