需要帮助调整枚举列表

时间:2012-03-21 12:29:05

标签: java enums

我的公开枚举如下:

   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,用于某些内部处理

请告诉我如何处理此案件。

先谢谢, 阿肖克

4 个答案:

答案 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*/