为什么要将异常从Double转换为double?
用过:
Console.writeLine(Validator.TryParse("1.5", double.class));
代码:
public static <T> T TryParse(Object ConvertFrom, java.lang.Class<T> ConvertTo) {
switch(ConvertTo.getSimpleName().toLowerCase()) {
case "int":
case "integer": return ConvertTo.cast((int)Integer.parseInt((String)ConvertFrom));
case "string": return ConvertTo.cast(String.valueOf(ConvertFrom));
case "double": return ConvertTo.cast((double)Double.parseDouble((String)ConvertFrom));
case "float": return ConvertTo.cast((float)Float.parseFloat((String)ConvertFrom));
case "long": return ConvertTo.cast((long)Long.parseLong((String)ConvertFrom));
default: return null;
}
}
答案 0 :(得分:1)
您正在混合基元和盒装基元。调用TryParse("1.5", Double.class)
可以正常工作(您可以删除所有不必要的原始强制转换,例如(int)
(double)
等。
您遇到的问题是Class#cast
首先检查Class#isInstance
和:
Double.class.isInstance(1.0);
是真的,但是:
double.class.isInstance(Double.valueOf(1.0))
double.class.isInstance(1.0d)
如javadoc 中所述,为false
如果此Class对象表示基本类型,则此方法返回false。
底线:primitive.class.cast()
将始终抛出异常。
答案 1 :(得分:1)
如果每次调用验证器时仍需要定义类,为什么不直接使用每个类的valueOf方法?诸如Integer和Double之类的Object类将能够处理原语并返回对象......
如前所述,你确定需要实现吗?您可能想要查看您的设计。
答案 2 :(得分:0)
应如下所示,请注意 Double
中的上限。
Console.writeLine(Validator.TryParse("1.5", Double.class));
答案 3 :(得分:0)
您可以使用Double.doubleValue()
和Integer.intValue()
。
更多阅读:
<强>除... 强>
您的方法想要返回一个Object,因此您无法返回基元。
编辑:
看起来你正在尝试做一些非常不自然和非Java的事情(Java是一种打字的语言)。