我有两个枚举。我想从两个枚举中创建一个Map对象。
我已经通过了EnumMap,但它说只有密钥可以是枚举。如果我错了,请纠正我。
private enum Export {
BINGOEXPORT, DEFECTSEXPORT, IBC3EXPORT, IBCONTRACTSEXPORT,
RMAHEADEREXPORT, RMALINESEXPORT, SITESEXPORT, SREXPORT
};
private enum Preperation {
BINGOPREPERATION, DEFECTSPREPERATION, IBC3PREPERATION,
IBCONTRACTSPREPERATION, RMAHEADERPREPERATION, RMALINESPREPERATION,
SITESPREPERATION, SRPREPERATION, IBEXPORTLOGPREPERATION
};
答案 0 :(得分:3)
普通的HashMap可以将枚举作为键和值。
Map<Export, Preparation> myMap = new HashMap<>();
myMap.put(Export.BINGOEXPORT, Preparation.BINGOPREPERATION);
答案 1 :(得分:2)
如果您想使用一个enum
作为键,另一个作为值,EnumMap
允许您这样做(demo):
EnumMap<Export,Preparation> e2p = new EnumMap<Export,Preparation>(Export.class);
e2p.put(Export.RMALINESEXPORT, Preparation.SRPREPERATION);
System.out.println(e2p.get(Export.RMALINESEXPORT));
如果您希望将enum
混合为同一Map
的密钥,则一种方法是为两个enum
创建一个公共接口,并将其用作密钥为Map
输入。您可以这样做,因为允许Java enum
扩展类并实现接口:
private interface CommonKey {
int hashCode();
boolean equals(Object other);
}
private enum Export implements CommonKey {
BINGOEXPORT, DEFECTSEXPORT, IBC3EXPORT, IBCONTRACTSEXPORT, RMAHEADEREXPORT, RMALINESEXPORT, SITESEXPORT, SREXPORT
}
private enum Preperation implements CommonKey {
BINGOPREPERATION, DEFECTSPREPERATION, IBC3PREPERATION, IBCONTRACTSPREPERATION, RMAHEADERPREPERATION, RMALINESPREPERATION, SITESPREPERATION, SRPREPERATION, IBEXPORTLOGPREPERATION
}
现在您可以声明您的地图:
Map<CommonKey,SomeClass> myMap = new HashMap<>();
myMap.put(Export.BINGOEXPORT, someObject);
myMap.put(Preperation.RMAHEADERPREPERATION, antherObject);
两种接口方法都是可选的,因为它们是从java.lang.Object
继承的。无论如何,我将它们添加到界面中,以便读者更容易理解实现类的哪些部分对于您使用界面非常重要。
答案 2 :(得分:0)
您可以尝试制作两个实现相同界面的枚举