如何解决如何从存储在地图中的枚举中检索值?
如何从存储在地图中的枚举中获取值?
我在一个类中有多个枚举类型。这些枚举类型作为值存储在映射中。我的要求是从特定的枚举类型(作为参数传递的名称)获取值。
在以下示例中,Test1 和 Test2 存储在映射中。我想为 x 的传递值和枚举类型(Test1 和 Test2..)获取 Y 的相应值。
public class TestClass {
public enum Test1 {
Const1("x1","y1"),Const2("x2","y2");
private String x;
private String y;
Test1(String x,String y) {
this.x = x;
this.y = y;
}
}
public enum Test2 {
Const1("x1","y2");
private String x;
private String y;
Test2(String x,String y) {
this.x = x;
this.y = y;
}
}
public static final Map<String,Collection<? extends Enum<?>>> testMap = Collections.unmodifiableMap(
new HashMap<String,Collection<? extends Enum<?>>>() {
{
put("Test1",Arrays.asList(Test1.values()));
put("Test2",Arrays.asList(Test2.values()));
}
}
);
//get function to be called from outside
public static String getValueY(String x,String enumType) {
return testMap.get(enumType).stream()....
}
public static void main(String[] args) {
getValueY("x1","Test1"); //This should give value as y1
}
}
解决方法
一种类型安全的方法,无需反射:
声明一个接口:
interface Foo {
String getX();
String getY();
让所有枚举实现该接口:
public enum Test1 implements Foo { ...
现在您可以将地图更改为
Map<String,Collection<Foo>> testMap
然后允许您调用两种方法,getX()
和 getY()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。