使用Java 8时出现奇怪的Android Studio错误

Ted*_*opp 5 java android java-8 android-studio-3.0

我刚刚从2.3.3升级到Android Studio 3.0,并且急于尝试现在支持API 26之前版本的新Java 8功能.我设置sourceCompatibilitytargetCompatibilityJavaVersion.VERSION_1_8我的build.gradle文件.然后,不幸的是,我在下面的课程中遇到了错误:

package com.zigzagworld.util;

import java.util.LinkedHashMap;

public class LRUCache<K, V> extends LinkedHashMap<K, V> {
    private final int maxSize;

    public LRUCache(int maxSize) {
        super(Math.min(16, (int) ((maxSize + 1) / 0.75f)), 0.75f, true);
        this.maxSize = maxSize;
    }

    @Override protected boolean removeEldestEntry(Entry<K, V> eldest) {
        return size() > maxSize;
    }
}
Run Code Online (Sandbox Code Playgroud)

错误是:

错误:(13,51)错误:LinkedHashMap中的条目不公开; 无法从外部包裹访问

编辑器本身没有显示任何错误; 它只显示为Gradle任务的输出:app:compileDebugJavaWithJavac.

我正在使用默认工具链.我尝试过清理和重建项目.我还尝试使缓存无效并重新启动Android Studio.

我可以通过在build.gradle文件中将语言更改回1.7来避免错误.不幸的是,因为我minSdkVersion17岁,所以我将无法使用try-with-resources和其他好东西.

有趣的是,我发现我可以通过使用完全限定名称java.util.Map.Entry而不是使用来解决错误Entry.我不知道为什么会这样,而裸名称会Entry产生错误.

我缺少一些配置设置吗?这是AS 3.0中的已知错误吗?

you*_*nes 2

您必须从入口处领取地图

@Override
 protected boolean removeEldestEntry (Map.Entry<K,V> eldest) {
  return size() > maxSize;
  }
Run Code Online (Sandbox Code Playgroud)

这条线 Map.Entry

我们需要从Map接口获取Entry,因为Entry接口是之前制作的,但是是在Map接口的最新更新中定义的。现在我们必须调用Map来访问接口或者更改包和文件夹导致这个