Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用两个库之间共享的相同值映射2个枚举_Java_Enums - Fatal编程技术网

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或类似的名称,要么使用映射,要么复制代码。但事实很简单,屏幕颜色和颜色不是同一类型的。这是一种可能性,但风险很大。这意味着,如果其中一个枚举获得新颜色,那么另一个枚举也必须获得新颜色,这可能并不总是如此。这是一种可能性,但风险很大。这意味着,如果其中一个枚举获得新颜色,那么另一个枚举也必须获得新颜色,这可能并不总是如此。