Java 需要调整枚举列表的帮助吗
我有如下公共枚举:Java 需要调整枚举列表的帮助吗,java,enums,Java,Enums,我有如下公共枚举: public enum stringList1 { string1, string2, string3, string4, string5, } 这个枚举“stringList1”在所有代码中都引用了100多个地方。目前我也需要支持下面的列表 enum stringList2 { string1, string2, string6,
public enum stringList1 {
string1,
string2,
string3,
string4,
string5,
}
这个枚举“stringList1”在所有代码中都引用了100多个地方。目前我也需要支持下面的列表
enum stringList2 {
string1,
string2,
string6,
}
实际上,代码应该根据条件选择stringList1或stringList2。
我知道枚举是不能更改的,而且更改所有代码以放置条件来选择正确的枚举列表是非常困难的
在这里重构不会有帮助,我需要在运行时选择stringList1或stringList2,但目前stringList1在代码中被引用。一个选项是将条件放在stringList1引用到pick stringList1或stringList2的所有位置,但这非常困难
用例:这是为了向后兼容,stringList1用于当前版本,比如说v2,stringList2用于v1。数据可以由V1二进制和V2二进制操作。当前如果用户试图使用V2二进制文件创建数据,它将创建V1无法理解的数据。所以在版本2中,我需要检查,如果版本是1,我需要使用stringList2,否则使用StringList1 假设方法method1(),它将在stringList1的帮助下创建一些预定义的值,这里用户可以访问method1(),但不能访问枚举值。 所以用户只需调用method1,我需要找到版本,根据版本,我必须使用stringList1或stringList2,但问题是stringList1在整个代码中都被使用:(作为Classname.stringList1.values()或Classname.stringList1在整个代码中,用于一些内部处理 请告知我如何处理这种情况 提前感谢,,
Ashok也许使用重构函数(来自eclipse——我想netbeans和其他人也有类似的功能)和重命名会有所帮助
public enum stringList {
stringList_string1,
stringList_string2,
stringList_string3,
stringList_string4,
stringList_string5,
}
public enum stringList2 {
stringList2_string1,
stringList2_string2,
stringList2_ string6,
}
希望这对您有所帮助:)在您的IDE中,您应该能够使用重构重命名一个实例,并且只重命名该实例(而不更改其他枚举)如果您需要保持枚举独立,即不只是将所有值添加在一起,您可以让它们实现一个接口,例如
public interface stringListCommon {
}
public enum stringList implements stringListCommon {
..
}
public enum stringList2 implements stringListCommon {
..
}
这将允许您使用相同的方法传递这些枚举。更好、更现代的方法(我想您知道枚举是从C提交的)是为此操作构造特殊的类。我会给你写一个纸牌套装的例子
public class Suit {
private final String name;
private Suit(String name);
public static final Suit CLUBS = new Suit("clubs");
public static final Suit DIAMONDS = new Suit("diamonds");
public static final Suit HEARTS = new Suit("hearts");
public static final Suit SPADES = new Suit("spades");
/*other code is what you need you need(either final Suit[]
or final unmodifiableList to store values*/
你能澄清你的问题吗?根本不清楚你到底需要做什么,或者你需要什么帮助。另外,re“enums不能更改”,这是运行时的事情。您可以在代码级别向枚举添加新值(如更改)。请至少发布一个条件。@T.J.Crowder感谢您的回复。根据某些条件,我需要支持stringList1或stringList2,而不是两者都支持,因此我无法向stringList1添加任何字符串。请让我知道,仍然不清楚。在这里重构将没有帮助,我需要在运行时选择stringList1或stringList2,但目前stringList1在所有代码中都被引用。一个选项是将条件放在stringList1引用的所有位置,这很困难。为什么需要两种不同的
enum
类型?如果它们是可交换的,为什么不只有一个呢?这是为了向后兼容,stringList1用于当前版本,比如说v2,stringList2用于v1。您可以有一个包含所有新旧值的枚举,而不是有两个枚举。当不需要旧值时,您可以删除它们。感谢Peter的回复。情况是这样的:数据可以由V1二进制和V2二进制操作。当前如果用户试图使用V2二进制文件创建数据,它将创建V1无法理解的数据。所以在版本2中,我需要检查,如果版本是1,我需要使用stringList2,否则使用StringList1