簡體   English   中英

使用Java 8時出現奇怪的Android Studio錯誤

[英]Weird Android Studio error with Java 8

我剛剛從2.3.3升級到Android Studio 3.0,並且急於嘗試現在支持API 26之前版本的新Java 8功能。 我在我的build.gradle文件中將sourceCompatibilitytargetCompatibility設置為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM