[英]Weird Android Studio error with Java 8
我剛剛從2.3.3升級到Android Studio 3.0,並且急於嘗試現在支持API 26之前版本的新Java 8功能。 我在我的build.gradle文件中將sourceCompatibility
和targetCompatibility
設置為JavaVersion.VERSION_1_8
。 然后,不幸的是,我在下面的課程中遇到了錯誤:
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;
}
}
錯誤是:
錯誤:(13,51)錯誤:LinkedHashMap中的條目不公開; 無法從外部包裹訪問
編輯器本身沒有顯示任何錯誤; 它只顯示為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接口的最新更新中定義的。 現在我們必須調用Map來訪問界面或者更改包和文件夾導致這個問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.