我想创建一个通用方法来有效地执行此操作:
class MyClass {
static <T extends Number> T sloppyParseNumber(String str) {
try {
return T.valueOf(str);
} catch (Exception e) {
return (T)0;
}
}
}
现在上面的代码无法编译,原因有两个:没有Number.valueOf()
方法和 0 无法转换为T
.
用法示例:
String value = "0.00000001";
System.out.println("Double: " + MyClass.<Double>sloppyParseNumber(value));
System.out.println("Float: " + MyClass.<Float>sloppyParseNumber(value));
double d = MyClass.sloppyParseNumber(value);
float f = MyClass.sloppyParseNumber(value);
用Java可以实现上述通用方法吗?如果是,怎么办?如果没有,什么是好的替代方法?
编辑:似乎有一些可能的重复项,但我没有找到一个恰好涵盖了这一点。我希望有一些技巧可以实现这两个操作:将字符串解析为Number
子类,并返回 0 值Number
子类。
我100%同意TofuBeer的观点。但如果您为了节省时间而希望避免冗长,也应该这样做:
static <T extends Number> T sloppyParseNumber(String str,Class<T> clas) {
if (clas == null) throw new NullPointerException("clas is null");
try {
if(clas.equals(Integer.class)) {
return (T) Integer.valueOf(str);
}
else if(clas.equals(Double.class)) {
return (T) Double.valueOf(str);
}
//so on
catch(NumberFormatException|NullPointerException ex) {
// force call with valid arguments
return sloppyParseNumber("0", clas);
}
throw new IllegalArgumentException("Invalid clas " + clas);
}
但纯粹是来自T
,您无法在运行时获取类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)