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。一开始就应该指出。