在java 8中打包私有可见性相关的变化?

时间:2018-01-03 17:45:54

标签: java

在Android应用程序中,我将java编译器更改为java 8,然后以下代码停止工作:

final Map<String, String> allRecords = new LinkedHashMap<String, String>() {
    @Override
    protected boolean removeEldestEntry(Entry eldest) {
        return size() > 10;
    }
};

它说:LinkedHashMap中的条目不公开;无法从外包装

访问

然而它最初编译。我不知道java 8中有任何与包私有可见性相关的更改。在java 8中是否有对此行为更改的引用?

2 个答案:

答案 0 :(得分:3)

根据该错误,您引用了LinkedHashMap.Entry中的LinkedHashMap私有内容。使用Map.Entry代替将解决此问题,但我不确定为什么更改Java平台会影响此问题,因为所有版本的访问都应该相同。

通过查看API文档,Entry不在LinkedHashMap中声明,而它在Map中,因此这可能只是对java 8中层次结构加载的更改,尽管这可能不正确。

参见文件...... https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.htmlhttps://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html

答案 1 :(得分:0)

您必须从条目中获取地图

final Map<String, String> allRecords = new LinkedHashMap<String, String>() {
    @Override
    protected boolean removeEldestEntry(Map.Entry eldest) {
        return size() > 10;
    }
};

此行Map.Entry

更改软件包和文件夹会导致此问题