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

时间:2013-04-04 00:37:24

标签: 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;
        }
    }

4 个答案:

答案 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是一种打字的语言)。