奇怪的 Android Studio 错误 Java 8

Weird Android Studio error with Java 8

我刚刚从 2.3.3 升级到 Android Studio 3.0,并且很想尝试新的 Java 8 功能,现在在 API 26 之前的版本中支持。我在 build.gradle 文件中将 sourceCompatibilitytargetCompatibility 设置为 JavaVersion.VERSION_1_8。然后,不幸的是,我得到了以下错误 class:

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;
    }
}

错误是:

Error:(13, 51) error: Entry is not public in LinkedHashMap; cannot be accessed from outside package

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

的输出

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

我可以通过在 build.gradle 文件中将语言改回 1.7 来避免错误。不幸的是,由于我的 minSdkVersion 是 17,我将无法使用 try-with-resources 和其他好东西。

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

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

您必须从入口处拿走地图

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

这一行Map.Entry

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