我正在使用typesafehub配置库的JSON配置。我需要将Double
值转换为Float
,因为JSON只保留“数字”,而不指定它们是Float
还是Double
。这适用于其他数据类型,例如Byte
,Short
等。
我想出的解决方案如下:
public <T> T getNumber(String path, Class<T> clazz) {
Number number = this.config.getNumber(path);
// Or alternatively, I can also get an Object or Double value
// Double dub = this.config.getDouble(path);
// Object obj = this.config.getValue(path).unwrapped();
if (clazz == Byte.class) {
return clazz.cast(number.byteValue());
} else if (clazz == Short.class) {
return clazz.cast(number.shortValue());
} else if (clazz == Integer.class) {
return clazz.cast(number.intValue());
} else if (clazz == Long.class) {
return clazz.cast(number.longValue());
} else if (clazz == Float.class) {
return clazz.cast(number.floatValue());
} else if (clazz == Double.class) {
return clazz.cast(number.doubleValue());
}
// Will usually return cast exception if not of type Double
return clazz.cast(number);
}
如果我尝试将Object
转换为Float
,或者由于原始类型未在编译时定义而导致转换异常,那么最佳解决方案就是直接转换它(因此,显然我不会让Object/Double Object
向那样的Float投射。
我的解决方案有效,但似乎我想要做的事情非常漫长。我所要做的就是从一个配置中获取不同的数据类型,该配置主要将数字存储为双打。唯一的另一种选择是为每个演员阵容设置一个单独的方法:
public float getFloat(String path) {
return (float) this.config.getDouble(path);
}
我有什么解决方案吗?我宁愿没有一个巨大的嵌套if语句,但似乎泛型在这种情况下不是很有用,尽管总体上有帮助。