今天写代码看到这种写法,哪位朋友给分析一下好处?和改进方法?

今天写代码看到这种写法,哪位朋友给分析一下好处?
原来的写法:

public static final String VERSION_1 = "1_native";
public static final String VERSION_2 = "2_native";
public static final String VERSION_3 = "3_native";
public static final String VERSION_4 = "native_202207";
      ...
      if (VERSION_1.equals(version) || 
          VERSION_2.equals(version) || 
          VERSION_3.equals(version) ||
          VERSION_4.equals(version)){
        log.debug("Call " + version +" begin, senderId is " + cmd.getSenderID());
        handleNative(很多参数);
        return;
      ....

改了的写法:

public enum VersionEnum {
    VERSION_1("1_native"),
    VERSION_2("2_native"),
    VERSION_3("3_native"),
    VERSION_4("native_202207"),

    private String version;

    VersionEnum( String version) {
        this.version = version;
    }
    public String getVersion() {
        return version;
    }
}
...
VersionEnum versionEnum = VersionEnum.valueOf(version);
 switch (versionEnum) {
        case VERSION_1:
        case VERSION_2:
        case VERSION_3:
        case native_202207:
          log.debug("Call " + version +" begin, senderId is " + cmd.getSenderID());
          handleNative(很多参数);
          return;
      }
...

还可以怎么改进?


public enum VersionEnum {
    VERSION_1("1_native"),
    VERSION_2("2_native"),
    VERSION_3("3_native"),
    VERSION_4("native_202207"),;
 
    private String version;
 
    VersionEnum( String version) {
        this.version = version;
    }
    public String getVersion() {
        return version;
    }

    /**
     *  匹配
     * @return
     */
    public static boolean match(String version){
       return Arrays.stream(values()).anyMatch(versionEnum -> versionEnum.getVersion().equals(version));
    }

   
}
  if (VersionEnum.match(version)){
            log.debug("Call " + version +" begin, senderId is " + cmd.getSenderID());
            handleNative(很多参数);

        }

用啥switch 啊,如果给的version不在哪几个里面,那么 versionEnum 就是null的,switch 就报错了;
看你这情形只需要判断 versionEnum 不是null就可以 执行 handleNative(很多参数);了

VersionEnum versionEnum = VersionEnum.valueOf(version);
if( versionEnum  != null){
  log.debug("Call " + version +" begin, senderId is " + cmd.getSenderID());
          handleNative(很多参数);
          return;
}

enum枚举,这个我搞课设项目会用上这个耶,你可以去找找enum这个关键字相关的内容,自己找找区别

区别没多大吧……而且第二种更难懂,毕竟switch用的还是比较少的。
而且第二种也不好改


public static final List<String> list = Arrays.asList("1_native", "2_native", "3_native", "native_202207");

if(list.contains("输入的值")){
  //do SomeThing
}

这种代码没必要改进,没什么技术含量体现

加了新版本号,不想改代码。首先,版本号要放到配置文件里,配置文件用propertries文件,key和value一样。系统启动的时候,初始化到一个map里,key和value都放版本号。判断时调用map的containsKey方法。
如果加新版本,不想重启应用,就加一个线程监控配置文件,变化了就更新map。
枚举类是很优雅,但是本身不支持动态创建(动态创建也可以,比较麻烦)。新加版本就要改代码,重新部署应用。真实的项目,上线后,重新部署应用,是非常麻烦滴。