为什么在将通用方法参数转换为特定参数时无法转换为类型?
Why getting unable to cast to type when casting generic method args to specific one?
我写了一个java科学计算器的代码,也写了jUnit测试it.Below是计算cubeRoot的方法
public <T> Double cubeRoot(T number){
Double result= Math.cbrt((Double)number);
return Math.abs(result);
}
方法returns正确的结果整数和双精度类型,但是当我为小数调用方法时,我传递的参数是双精度type.Following是上述方法的JUint测试。
public void testCalculateCubeRootWhenNegative(){
Integer number=-64;
assertEquals(-4.0,sci.cubeRoot(number));
}
public void testCalculateCubeRootOfdecimal(){
Double number=0.40;
assertEquals(0.736,sci.cubeRoot(number));
}
这是我正在使用的界面
public interface iScientific extends iMaths {
<T>Double squareRoot(T number);
<T>Double cubeRoot(T number);
无法找到解决错误的方法"java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Double"
您正在尝试做这样的事情:
Integer i = Integer.valueOf(0);
Double d = (Double) i;
这不起作用,因为 i
不是 Double
的实例。
我建议更改您的 cubeRoot
方法以接受 Number
(Integer
和 Double
的基础 class):
public Double cubeRoot(Number number) {
Double result = Math.cbrt(number.doubleValue());
return Math.abs(result);
}
我又做了一些代码更改,使代码没有错误,因为最初的错误 persist.Check 我已经进行了更正,并建议对代码进行更多重构。
public Double cubeRoot(Number number){
DecimalFormat df=new DecimalFormat("#.####");
double result= Math.cbrt(number.doubleValue());
return Double.valueOf(df.format(result));
}
并通过了以下测试。
public void testCalculateCubeRootWhenNegative(){
Integer number=-64;
assertEquals(-4.0,sci.cubeRoot(number));
}
public void testCalculateCubeRootOfdecimal(){
Double number=0.40;
assertEquals(0.7368,sci.cubeRoot(number));
}
我写了一个java科学计算器的代码,也写了jUnit测试it.Below是计算cubeRoot的方法
public <T> Double cubeRoot(T number){
Double result= Math.cbrt((Double)number);
return Math.abs(result);
}
方法returns正确的结果整数和双精度类型,但是当我为小数调用方法时,我传递的参数是双精度type.Following是上述方法的JUint测试。
public void testCalculateCubeRootWhenNegative(){
Integer number=-64;
assertEquals(-4.0,sci.cubeRoot(number));
}
public void testCalculateCubeRootOfdecimal(){
Double number=0.40;
assertEquals(0.736,sci.cubeRoot(number));
}
这是我正在使用的界面
public interface iScientific extends iMaths {
<T>Double squareRoot(T number);
<T>Double cubeRoot(T number);
无法找到解决错误的方法"java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Double"
您正在尝试做这样的事情:
Integer i = Integer.valueOf(0);
Double d = (Double) i;
这不起作用,因为 i
不是 Double
的实例。
我建议更改您的 cubeRoot
方法以接受 Number
(Integer
和 Double
的基础 class):
public Double cubeRoot(Number number) {
Double result = Math.cbrt(number.doubleValue());
return Math.abs(result);
}
我又做了一些代码更改,使代码没有错误,因为最初的错误 persist.Check 我已经进行了更正,并建议对代码进行更多重构。
public Double cubeRoot(Number number){
DecimalFormat df=new DecimalFormat("#.####");
double result= Math.cbrt(number.doubleValue());
return Double.valueOf(df.format(result));
}
并通过了以下测试。
public void testCalculateCubeRootWhenNegative(){
Integer number=-64;
assertEquals(-4.0,sci.cubeRoot(number));
}
public void testCalculateCubeRootOfdecimal(){
Double number=0.40;
assertEquals(0.7368,sci.cubeRoot(number));
}