我有两个枚举。我想从两个枚举中创建一个地图对象。
我已经经历了Enummap,但它说只有钥匙才能是枚举。如果我错了,请纠正我。
private enum Export {
BINGOEXPORT, DEFECTSEXPORT, IBC3EXPORT, IBCONTRACTSEXPORT,
RMAHEADEREXPORT, RMALINESEXPORT, SITESEXPORT, SREXPORT
};
private enum Preperation {
BINGOPREPERATION, DEFECTSPREPERATION, IBC3PREPERATION,
IBCONTRACTSPREPERATION, RMAHEADERPREPERATION, RMALINESPREPERATION,
SITESPREPERATION, SRPREPERATION, IBEXPORTLOGPREPERATION
};
普通的哈希图可以使枚举作为钥匙和值良好。
Map<Export, Preparation> myMap = new HashMap<>();
myMap.put(Export.BINGOEXPORT, Preparation.BINGOPREPERATION);
如果您想将一个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
S作为相同Map
的键混合,则一种方法是为两个enum
s制作一个通用接口,并将其用作Map
的键类型。您可以这样做,因为允许Java enum
s扩展类并实现接口:
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
继承的。无论如何,我将它们添加到接口中,以使您的读者更容易了解实现类的哪些部分对于您使用接口很重要。
您可以尝试进行两个实现相同接口的枚举