2013-10-16 18 views
-1

我必須java枚舉,A和B以及EnumMap是否可以將A和B中的鍵添加到此映射中?是否可以將不同枚舉中的鍵添加到Java中的EnumMap中?

EnumMap<? extends Enum,Object> enumMap = new EnumMap(Enum.class); 

Object o1 = new Object(); 
Object o2 = new Object(); 

Enum e1 = A.X 
Enum e2 = B.X 
enumMap.put(e1,o1) 
enumMap.put(e2,o2) 

我試過沒有成功,有什麼我做錯了嗎?

+0

你得到的錯誤/異常是什麼? –

+0

如何聲明你的枚舉映射? – Julien

+0

這是一個演示:http://ideone.com/GBysFS;我們需要更多信息,例如錯誤消息來解決您的問題。 –

回答

1

使用不同的枚舉作爲映射鍵是行不通的。從documentation

枚舉映射中的所有鍵必須來自在創建映射時明確或隱含指定的單個枚舉類型。

您需要使用不同的地圖實現。

0

您可以按以下方式嘗試。考慮下面的例子。

public enum EnumA { 
typeA("1"); 
EnumA(String s) { 
} 

} 

public enum EnumB { 
typeB("2"); 

EnumB(String s) { 
} 

} 

現在您可以創建如下圖。

Map<Enum,String> enumMap=new HashMap<>(); 
    enumMap.put(EnumA.typeA,"a"); 
    enumMap.put(EnumB.typeB, "b"); 

    System.out.println(enumMap); 
0

我justed偶然發現了你的問題,以爲我想解釋一下爲什麼這是不可能使用不同的枚舉作爲鍵地圖。

爲了做到這一點,我們首先要研究EnumMap的實現。在Java中,EnumMap只是一個包含值對象數組的對象。讓我們假設這個例子:

你有你的枚舉類顏色

enum Colors { 
    BLUE, 
    RED, 
    YELLOW; 
} 

和存儲一些顏色的水果在EnumMap的一類:

class MyClass { 
    EnumMap<Colors, String> coloredFruits = new EnumMap<>(Colors.class); 

    void main() { 
     coloredFruits.put(Colors.RED, "Apple"); 
     coloredFruits.put(Colors.BLUE, "Grape"); 
     coloredFruits.put(Colors.YELLOW, "Banana"); 
    } 
} 

什麼Java沒有現用以下數組創建一個新的EnumMap - 對象:

String[] values = { "Grape", "Apple", "Banana" } 

這正是使EnumMap如此高效的原因。它實際上不僅僅是一個具有一系列值對象和一些存儲類的字段的對象(在我們的例子中,它將是Class keyType = Colors.class)。爲了使其按照預期工作,只能有一個keyType類。

相關問題