java - 类从 Double 到 double 的强制转换异常

标签 java

为什么类将异常从 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/

相关文章:

java - 在 Java 中的文本框上绘制对角线

java - 创建 Java 服务或守护程序脚本的最佳实践

java - 将 Spinner<Integer> 绑定(bind)到现有 IntegerProperty

java - 如果 c 比 b 小得多,找到 a**b % c(a 幂 b 模 c)的最佳方法是什么?

java - Java迭代器存储对象

java - 将阿拉伯文本与正则表达式匹配

java - 在具有指定数字的 EditText 上使用 OnEditorActionListener

java - 在 Map 中实现按键或 strip 锁定 - 最佳方法?

java - 从 servlet Java 下载 zip

java - 线程状态阻塞和等待之间的区别