如何将两个枚举添加到单个地图对象为键和值



我有两个枚举。我想从两个枚举中创建一个地图对象。

我已经经历了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继承的。无论如何,我将它们添加到接口中,以使您的读者更容易了解实现类的哪些部分对于您使用接口很重要。

您可以尝试进行两个实现相同接口的枚举

最新更新