[英]How to add two enums to a single Map object as key and value
我有两个枚举。 我想从两个枚举中创建一个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
};
普通的HashMap可以很好地将枚举作为键和值。
Map<Export, Preparation> myMap = new HashMap<>();
myMap.put(Export.BINGOEXPORT, Preparation.BINGOPREPERATION);
如果您想使用一个enum
作为键,而另一个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
。 无论如何,我都将它们添加到接口中,以使您的读者更容易理解实现类的哪些部分对于您使用接口很重要。
您可以尝试制作两个实现相同接口的枚举
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.