gpt4 book ai didi

java - 在 Java 1.6 中使用不同枚举类型的 String 开关

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:15 25 4
gpt4 key购买 nike

我有带有 ifelse if 的代码来查找某种类型并从中创建相应的值。我想知道如何提高效率,我在论坛中找到了以下帖子,但我没有像 boolean 这样的类型,我的类型是 bollean.edmchar.edm 等。

有没有办法使用以下代码进行调整来支持我的情况?

public static void main(String[] args) throws InterruptedException {
String typeName = "Boolean";
String memberValue = "memberValue";
SwitchInputType type = Type.valueOf(typeName).makeType(memberValue);
}

enum Type {
Boolean {
SwitchInputType makeType(String memberValue) {
return new SwitchInputType<Boolean>(new Boolean(memberValue));
}
},
Double {
SwitchInputType makeType(String memberValue) {
return new SwitchInputType<Double>(new Double(memberValue));
}
},
Int32 {
SwitchInputType makeType(String memberValue) {
return new SwitchInputType<Integer>(new Integer(memberValue));
}
};

// All must do this.
abstract SwitchInputType makeType(String memberValue);
}

static class SwitchInputType<T> {
public SwitchInputType(Object o) {
}
}

最佳答案

根据this ,这看起来像是您神秘的 Odata 类型 的文档。或多或少的工作解决方案应该如下所示(只需将 String typeName 值从 标准 java.lang.classes 更改为那些 Odata type ;)):

public class Test {
public static void main(String[] args) throws InterruptedException {
String typeName = "Edm.Double";
String namePreparedForEncoding = typeName.replace('.', '_');
Type type = Type.valueOf(namePreparedForEncoding);
System.out.println(type);

String memberValue = "42.99";
SwitchInputType<?> value = type.makeType(memberValue);
System.out.println(value);

String typeName1 = "Edm.Int32";
String namePreparedForEncoding1 = typeName1.replace('.', '_');
Type type1 = Type.valueOf(namePreparedForEncoding1);
System.out.println(type1);

String memberValue1 = "42";
SwitchInputType<?> value1 = type1.makeType(memberValue1);
System.out.println(value1);
}

enum Type {
Edm_Boolean {
SwitchInputType makeType(String memberValue) {
return new SwitchInputType<Boolean>(new Boolean(memberValue));
}
},
Edm_Double {
SwitchInputType makeType(String memberValue) {
return new SwitchInputType<Double>(new Double(memberValue));
}
},
Edm_Int32 {
SwitchInputType makeType(String memberValue) {
return new SwitchInputType<Integer>(new Integer(memberValue));
}
};

// All must do this.
abstract SwitchInputType makeType(String memberValue);
}

static class SwitchInputType<T> {
private Object o;

public SwitchInputType(Object o) {
this.o = o;
}

@Override
public String toString() {
return "SwitchInputType: " + o.toString();
}
}
}

输出:

Edm_Double
SwitchInputType: 42.99

Edm_Int32
SwitchInputType: 42

正如您可能注意到的,我已将枚举中的 Edm. 替换为 Edm_ - 因为枚举不能是中间带有点的名称。

PS:

如果您稍微更改一下 toString() 方法,您将确信转换确实有效:

    public String toString() {
return String.format("SwitchInputType: (%s) %s", o.getClass().getSimpleName(), o);
}

结果:SwitchInputType:(双)42.99

希望这对你有帮助

关于java - 在 Java 1.6 中使用不同枚举类型的 String 开关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15585446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com