我的公开枚举如下:
public enum stringList1 {
string1,
string2,
string3,
string4,
string5,
}
此枚举“stringList1”在整个代码中被引用超过100个位置。目前我还要求支持以下列表。
enum stringList2 {
string1,
string2,
string6,
}
实际上代码应该根据条件选择stringList1或stringList2。 我知道枚举不能改变,也改变了所有代码,把条件选择正确的枚举列表是非常困难的。
这里的重构无济于事,我需要在运行时选择stringList1或stringList2,但目前在整个代码中引用了stringList1。一个选项是将条件放在所有的地方,stringList1被称为pick stringList1或stringList2,但这非常困难。
UseCase:这是为了向后兼容,stringList1用于当前版本,比如v2,stringList2用于v1。数据可以通过V1二进制和V2二进制来操作。如果用户尝试使用V2二进制文件创建数据,它将创建数据,这是V1无法理解的。所以在版本2二进制文件中我需要检查,如果版本是1,我需要使用stringList2 else stringList 1
让我们说方法method1(),它将在stringList1的帮助下创建一些预定义的值,这里用户可以访问method1(),无法访问枚举值。 所以用户只需调用method1,我需要找到版本,具体取决于版本,我必须使用stringList1或stringList2,但问题是stringList1遍及整个代码:(作为Classname.stringList1.values()或Classname。整个代码中的stringList1,用于某些内部处理
请告诉我如何处理此案件。
先谢谢, 阿肖克
答案 0 :(得分:0)
也许使用重构函数(来自eclipse - 我猜netbeans和其他人也有类似的东西)并且重命名可以帮助
public enum stringList {
stringList_string1,
stringList_string2,
stringList_string3,
stringList_string4,
stringList_string5,
}
public enum stringList2 {
stringList2_string1,
stringList2_string2,
stringList2_ string6,
}
希望这可以帮助你:)
答案 1 :(得分:0)
在IDE中,您应该能够使用重构来重命名一个实例,并且只重命名该实例(不更改其他枚举)
答案 2 :(得分:0)
如果你需要将枚举分开,即不仅仅将所有值加在一起,你可以让它们实现一个接口,例如:
public interface stringListCommon {
}
public enum stringList implements stringListCommon {
..
}
public enum stringList2 implements stringListCommon {
..
}
这将允许您使用相同的方法传递这些枚举。
答案 3 :(得分:0)
更好更现代的方式(我认为你知道枚举来自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*/