为什么类将异常从 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;
}
}
最佳答案
您正在混合基元和盒装基元。调用 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 中所述是错误的
If this Class object represents a primitive type, this method returns false.
底线:primitive.class.cast()
总是会抛出异常。
关于java - 类从 Double 到 double 的强制转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15800650/