簡體   English   中英

無法創建名為Entry的類

[英]Unable to create a class with name Entry

以下代碼無法編譯,並顯示以下錯誤消息:

類型不匹配:無法從元素類型Test1.Entry轉換為Map.Entry

我的問題是,在使用hash map ,我們不能在項目中使用名為Entry類嗎? 為什么這個錯誤存在,雖然我沒有在這里導入任何Entry類。

import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
public class Test1 {

    public static class Entry<T> {
        public String m() {
            return "A";
        }
    }

    public static void main(String[] args) {
        final Set<Entry> a = new HashSet<>();

        new HashMap<String, Entry>() {
            {
                for (final Entry entry : a) {
                    put(entry.m(), entry);
                }
            }
        };
    }
}

有什么方法可以保持這個類名和代碼成功編譯。

你的名字有問題:

你的Entry<T>在某些時候是java.util.Map.Entry<K, V>陰影

只需將Entry重命名為其他內容即可

public static class MyEntry<T> {
    public String m() {
        return "A";
    }
}

您需要告訴編譯器您要使用java.util提供的Entry接口。

由於您已經在使用它的同一個包中有一個名為Entry的類,因此它是隱式導入的。 對於您打算使用java.util中的Entry所有地方,您必須顯式使用java.util.Map.Entry而不僅僅是Entry 這樣您就可以使用這兩個類。

由於您使用的是雙括號初始化,因此映射內部會在該塊中公開。

重命名Entry類或將初始化代碼移出HashMap的init塊,這樣您的Entry不會影響映射內部Entry實現。

final HashMap<String, Entry> map = new HashMap<>();
for (final Entry entry : a) {
   map.put(entry.m(), entry);
}

這個快照可能會讓你懷疑,

在此輸入圖像描述

正如錯誤彈出窗口所述,編譯器認為在你的for循環中它是java.util.Map.Entry但你想在這里遍歷你的自定義Entry類。

即使你假設你沒有導入java.util.Map.Entry ,嘗試刪除第一個導入(即HashMap),你會發現你不再獲得不兼容的類型錯誤。

您可以嘗試任何建議的解決方法來擺脫這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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