Java 匹配2个枚举 概述

Java 匹配2个枚举 概述,java,typescript,enums,Java,Typescript,Enums,我有两个枚举: FrontEnum: FrontEnum{ 高=‘最高点’, 中等=‘中等高度’, 低=‘不高’, } BackEndEnum: public enum BackEndEnum{ 高_ASDF(12), 中等ASDF(23), 低ASDF(34), } 第一个作为复选框的标签向用户公开 我无法修改这些枚举 前端:角度,后端:弹簧引导 问题 假设用户选中了“中等高度”复选框 我应该如何向后端发送此枚举值的键(MEDIUM)以匹配后端枚举的键(MEDIUM_ASDF)以便

我有两个枚举:

  • FrontEnum
    FrontEnum{
    高=‘最高点’,
    中等=‘中等高度’,
    低=‘不高’,
    }
    
  • BackEndEnum
    public enum BackEndEnum{
    高_ASDF(12),
    中等ASDF(23),
    低ASDF(34),
    }
    
    • 第一个作为复选框的标签向用户公开
    • 我无法修改这些枚举
    • 前端:角度,后端:弹簧引导
    问题 假设用户选中了“中等高度”复选框


    我应该如何向后端发送此枚举值的键(MEDIUM)以匹配后端枚举的键(MEDIUM_ASDF)以便后端可以稍后将其解析为“23”并继续进行?

    尝试创建这样的后端枚举以解决此问题

    public enum BackEndEnum {
        HIGH_ASDF(12, "The highest of heights"),
        MEDIUM_ASDF(23, "The medium height"),
        LOW_ASDF(34, "No height");
        
        private int id;
        private String value;
    
        BackEndEnum(final int id, final String value) {
          this.id = id;
          this.value = value;
        }
    
        public int getId() {
            return this.id;
        }
    
        public String getValue() { 
             return this.value;
        }
    
    }
    

    您正在从前端发送
    FrontEnum
    类型并将其转换为
    BackEndEnum
    ,因此使用下面的函数将其转换

    function getValue(frontEnum: FrontEnum): number {
        let backEndVal: number;
        switch(frontEnum){
            case FrontEnum.HIGH: 
                backEndVal = BackEndEnum.HIGH_ASDF;
                break;
             case FrontEnum.MEDIUM: 
                backEndVal = BackEndEnum.MEDIUM_ASDF;
                break;
             case FrontEnum.LOW: 
                backEndVal = BackEndEnum.LOW_ASDF;
                break;
        }
    
        return backEndVal;
    }
    
    console.log(getValue(FrontEnum.MEDIUM)); // 23 as output
    

    操场链接:

    如果您无法更改任何提及的枚举,一种可能是根据其位置进行匹配。然而,我强烈推荐一个更高级的解决方案,比如Vishal的答案。仓位匹配太弱,风险太大。任何职位修改都会给你错误的结果

      private static BackEndEnum byPosition(final int pos){
        final var values = BackEndEnum.values();
        if(pos < 0 || pos > values.length){
          throw new IllegalArgumentException("Invalid Position");
        }
        return values[pos];
      }
    
    private static BackEndEnum byPosition(最终整数位置){
    最终变量值=backendnum.values();
    if(pos<0 | | pos>值.长度){
    抛出新的IllegalArgumentException(“无效位置”);
    }
    返回值[pos];
    }
    
    至少您可以保留相同名称的枚举而不是值,并为后端枚举定义getter函数。让val=BackEndEnum[BackEndEnum.MEDIUM]否则您将在多个位置同步/在typescript中添加了一个ans,请检查您如何在后端使用前端的FrontEnum数据意味着java端?您是否使用任何框架?通过带Spring Boot的rest api。一开始就应该指出。