【发布时间】:2018-01-29 13:31:40
【问题描述】:
我有 2 个具有相同值的枚举,以及一些使用一个枚举的方法和一些使用另一个枚举的方法。我想传递其中一种枚举类型来代替另一种。例如:
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);
【问题讨论】:
-
所以,确实需要在它们之间实现一些映射。既然你已经猜到了,那么你遇到了什么问题?
-
@Stultuske 除了创建映射之外还有其他方式吗?我有 3 对这样的对。将来可能会有更多。
-
这两种类型看起来很相似,但在语法上却不匹配。除非,也许,你没有在 myFunc 方法中使用枚举,而是使用 enum.name() 或类似的东西。
-
我需要这样做,因为其中一个枚举驻留在外部库中,我不希望我的所有代码库都依赖于它。而且我也没有在方法中使用字符串表示。您建议的那个在 IMO 代码中随处可见有点糟糕:
Colors.valueof(ScreenColors.RED.toString()) -
我什么时候提出过这个建议?无论哪种方式,要么使用 RED.name() (或类似的),要么使用映射,要么复制代码。但这是一个非常简单的事实,即 ScreenColors 和 Colors 不是同一类型。