我有带有 if
和 else if
的代码来查找某种类型并从中创建相应的值。我想知道如何提高效率,我在论坛中找到了以下帖子,但我没有像 boolean
这样的类型,我的类型是 bollean.edm
、char.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
希望这对你有帮助
我是一名优秀的程序员,十分优秀!