在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中是否有对此行为更改的引用?
答案 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.html, https://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
更改软件包和文件夹会导致此问题