奇怪的 Android Studio 错误 Java 8
Weird Android Studio error with Java 8
我刚刚从 2.3.3 升级到 Android Studio 3.0,并且很想尝试新的 Java 8 功能,现在在 API 26 之前的版本中支持。我在 build.gradle 文件中将 sourceCompatibility
和 targetCompatibility
设置为 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接口的最新更新中定义的。
现在我们必须调用地图访问界面或更改包和文件夹导致此
我刚刚从 2.3.3 升级到 Android Studio 3.0,并且很想尝试新的 Java 8 功能,现在在 API 26 之前的版本中支持。我在 build.gradle 文件中将 sourceCompatibility
和 targetCompatibility
设置为 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接口的最新更新中定义的。 现在我们必须调用地图访问界面或更改包和文件夹导致此