繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM