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