当前位置: 代码迷 >> java >> 将通用方法args转换为特定方法时,为什么无法转换为类型?
  详细解决方案

将通用方法args转换为特定方法时,为什么无法转换为类型?

热度:85   发布时间:2023-07-27 09:16:06.0

我已经写了一个科学计算器的Java代码,也为它写了jUnit测试。以下是计算cubeRoot的方法。

public <T> Double cubeRoot(T number){
    Double result= Math.cbrt((Double)number);
    return Math.abs(result);
}

方法返回正确的结果整数和双精度类型,但是当我为十进制调用方法时,参数传递的是双精度类型。以下是上述方法的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无法转换为java.lang.Double”

您正在尝试执行以下操作:

Integer i = Integer.valueOf(0);
Double d = (Double) i;

这不起作用,因为i不是Double的实例。

我建议将您的cubeRoot方法更改为接受 ( IntegerDouble的基类):

public Double cubeRoot(Number number) {
  Double result = Math.cbrt(number.doubleValue());
  return Math.abs(result);
}

再次,我做了一些更多的代码更改,以使代码无错误,因为最初的错误仍然存??在。请检查我所做的更正,并建议对代码进行更多的重构。

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));
}
  相关解决方案