Java 使用两个库之间共享的相同值映射2个枚举
我有两个枚举,其中的值相同,有些方法使用一个枚举,有些方法使用另一个枚举。我想传递一个枚举类型来代替另一个。例如:Java 使用两个库之间共享的相同值映射2个枚举,java,enums,Java,Enums,我有两个枚举,其中的值相同,有些方法使用一个枚举,有些方法使用另一个枚举。我想传递一个枚举类型来代替另一个。例如: public enum Colors { RED, BLUE, GREEN } public enum ScreenColors { RED, BLUE, GREEN } public void myFunc(Colors color) { // Some code } // Want to call this as: myFunc(ScreenColors.RED)
public enum Colors { RED, BLUE, GREEN }
public enum ScreenColors { RED, BLUE, GREEN }
public void myFunc(Colors color) {
// Some code
}
// Want to call this as:
myFunc(ScreenColors.RED);
您可以将此静态组添加到颜色枚举
private static final Map<Colors, ScreenColors> LOOK_UP = new HashMap<>();
static {
for (Colors value : EnumSet.allOf(Colors.class)) {
LOOK_UP.put(value, ScreenColors.valueOf(value.name());
}
}
public static ScreenColors forColors(Colors color) {
return LOOK_UP.get(color);
}
您可以将此静态组添加到颜色枚举
private static final Map<Colors, ScreenColors> LOOK_UP = new HashMap<>();
static {
for (Colors value : EnumSet.allOf(Colors.class)) {
LOOK_UP.put(value, ScreenColors.valueOf(value.name());
}
}
public static ScreenColors forColors(Colors color) {
return LOOK_UP.get(color);
}
因此,确实需要在它们之间实现一些映射。既然你已经猜到了,你有什么问题?@Stultuske除了创建映射还有别的方法吗?我有三双这样的鞋。这两种类型看起来很相似,但在语法上,它们并不匹配。除非,也许,您没有在myFunc方法中使用枚举,而是使用enum.name或类似的东西。我需要这样做,因为其中一个枚举位于外部库中,我不希望我的所有代码库都依赖于它。我也没有在方法中使用字符串表示。你建议的那个在代码IMO中到处都有,这有点不好:Colors.valueofScreenColors.RED.tostring我是怎么建议的?无论哪种方式,要么使用RED.name或类似的名称,要么使用映射,要么复制代码。但是屏幕颜色和颜色不属于同一类型,这是一个非常简单的事实。因此,确实需要在它们之间实现一些映射。既然你已经猜到了,你有什么问题?@Stultuske除了创建映射还有别的方法吗?我有三双这样的鞋。这两种类型看起来很相似,但在语法上,它们并不匹配。除非,也许,您没有在myFunc方法中使用枚举,而是使用enum.name或类似的东西。我需要这样做,因为其中一个枚举位于外部库中,我不希望我的所有代码库都依赖于它。我也没有在方法中使用字符串表示。你建议的那个在代码IMO中到处都有,这有点不好:Colors.valueofScreenColors.RED.tostring我是怎么建议的?无论哪种方式,要么使用RED.name或类似的名称,要么使用映射,要么复制代码。但事实很简单,屏幕颜色和颜色不是同一类型的。这是一种可能性,但风险很大。这意味着,如果其中一个枚举获得新颜色,那么另一个枚举也必须获得新颜色,这可能并不总是如此。这是一种可能性,但风险很大。这意味着,如果其中一个枚举获得新颜色,那么另一个枚举也必须获得新颜色,这可能并不总是如此。