为什么在将泛型方法args转换为特定方法时无法转换为类型?

Ign*_*ind 2 java junit4

我为科学计算器编写了一个java代码,并为它编写了jUnit测试.Below是计算cubeRoot的方法.

public <T> Double cubeRoot(T number){
    Double result= Math.cbrt((Double)number);
    return Math.abs(result);
}
Run Code Online (Sandbox Code Playgroud)

方法返回正确的结果整数和double类型,但是当我调用十进制方法时,参数i pass是double类型.以下是上述方法的JUint Test.

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));
}
Run Code Online (Sandbox Code Playgroud)

这就是我正在使用的界面

public interface iScientific extends iMaths {
<T>Double squareRoot(T number);

<T>Double cubeRoot(T number);
Run Code Online (Sandbox Code Playgroud)

无法找到获取错误的解决方案"java.lang.ClassCastException:java.lang.Integer无法强制转换为java.lang.Double"

Rob*_*ahl 5

你正在尝试做这样的事情:

Integer i = Integer.valueOf(0);
Double d = (Double) i;
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为i它不是一个实例Double.

我建议改变你的cubeRoot方法来接受一个Number(两者的基类IntegerDouble):

public Double cubeRoot(Number number) {
  Double result = Math.cbrt(number.doubleValue());
  return Math.abs(result);
}
Run Code Online (Sandbox Code Playgroud)