Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从双精度到双精度的类强制转换异常_Java - Fatal编程技术网

Java 从双精度到双精度的类强制转换异常

Java 从双精度到双精度的类强制转换异常,java,Java,为什么类将异常从Double强制转换为Double 用法如下: Console.writeLine(Validator.TryParse("1.5", double.class)); 代码: publicstaticttryparse(objectconvertfrom,java.lang.Class ConvertTo){ 开关(ConvertTo.getSimpleName().toLowerCase()){ 案例“int”: 大小写“integer”:返回ConvertTo.cast((

为什么类将异常从Double强制转换为Double

用法如下:

Console.writeLine(Validator.TryParse("1.5", double.class));
代码:

publicstaticttryparse(objectconvertfrom,java.lang.Class ConvertTo){
开关(ConvertTo.getSimpleName().toLowerCase()){
案例“int”:
大小写“integer”:返回ConvertTo.cast((int)integer.parseInt((String)ConvertFrom));
大小写“string”:返回ConvertTo.cast(string.valueOf(ConvertFrom));
大小写“double”:返回ConvertTo.cast((double)double.parseDouble((String)ConvertFrom));
大小写“float”:返回ConvertTo.cast((float)float.parseFloat((String)ConvertFrom));
大小写“long”:返回ConvertTo.cast((long)long.parseLong((String)ConvertFrom));
默认值:返回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)
如表中所解释的,是错误的

如果该类对象表示基元类型,则该方法返回false


底线:
primitive.class.cast()
将始终引发异常。

应该如下所示,请注意Double中的大写字母

Console.writeLine(Validator.TryParse("1.5", Double.class));

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

更多阅读:

除了……

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


社论:


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

如果每次调用验证器时仍需要定义类,为什么不使用每个类的valueOf方法呢?Integer和Double等对象类将能够处理原语和返回对象


正如之前所问的,您确定需要实现此功能吗?你可能想回顾一下你的设计。

是的,我确定:如果我确定,你是什么意思。。C++没有“对象”。或字符串。是的,但C是字符串而不是字符串。@dasblinkenlight我也在想,但是
java.lang.Class
毫无疑问;-)
Console.writeLine
把我甩了。。。我还以为是C#:它既允许
string
又允许
string
.K。那么你是说原语的“盒装”版本不能转换为原语类型?你是认真的吗?C#允许这样做。。那么另一条路是什么呢。。将两者分开考虑?这样做没有意义:S@CantChooseUsernames:不能对基元类型调用
.class
。@CantChooseServerNames不能按您的方式对其进行强制转换
double.class.cast(double.valueOf(1.0d))
@CantChooseServerNames-你到底为什么要实现这样一种方法@老实说,我发现
Validator.TryParse(“1.5”,double.class)
(以及与之配套的所有代码)比
double.parseDouble(“1.5”)复杂得多但它可能对您的用例有意义(实际上,如果您解释了您的最终目标是什么,您可能会发现有一种不同的方法)。但是我需要一个单独的“Double”和“Double”用例,如果类型不可铸造,那么我该怎么做:Double J=10;双I=J?这是一个隐式的演员阵容,而且很有效。
Console.writeLine(Validator.TryParse("1.5", Double.class));