1

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

4 回答 4

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中所解释的那样是错误的

如果此 Class 对象表示原始类型,则此方法返回 false。

底线:primitive.class.cast()总是会抛出异常。

于 2013-04-04T00:40:10.063 回答
1

如果每次调用validator还是需要定义类,为什么不直接使用每个类的valueOf方法呢?诸如 Integer 和 Double 之类的 Object 类将能够处理原语并返回对象...

正如之前被问到的,你确定你需要实现这个吗?您可能想要查看您的设计。

于 2013-04-04T01:03:21.633 回答
0

它应该如下所示,注意Double.

Console.writeLine(Validator.TryParse("1.5", Double.class));
于 2013-04-04T00:41:47.707 回答
0

您可以使用Double.doubleValue()Integer.intValue()

更多阅读:

除了....

你的方法想要返回一个对象,所以你不能返回原语。


社论:

似乎您正在尝试做一些非常不自然和非 Java 的事情(Java 是一种类型语言是有原因的)。

于 2013-04-04T00:47:49.967 回答