繁体   English   中英

不能将整数转换为双精度(包装类)

[英]Can't cast Integer into Double (Wrapper class)

我试图创建一个函数,如果 x 和 y 是整数,则返回 x 和 y 之间的随机 int,但如果 x 或 y 是双精度,则函数返回 x 和 y 之间的双精度。 但是当我尝试使用整数时,它会抛出异常:

“类 java.lang.Integer 不能转换为类 java.lang.Double(java.lang.Integer 和 java.lang.Double 位于加载器'bootstrap'的模块 java.base 中)”

我该如何解决?

public class Test {
    public static void main(String[] args) {
        System.out.print(rand(10,12.0));
    }
    public static<t extends Number> double rand(t x,t y) {
        double a = (double) x;
        double b = (double) y;
        b = a < b ?(a + (b - a) * Math.random()):(b + (a - b) * Math.random());
        return (x instanceof Double || y instanceof Double) ? b : (int) b;
    }
}

问题是您使用的是引用类型(包装类)而不是原始类型。 intdouble的转换有效,但从IntegerDouble的转换无效。 所以你需要找到一些其他的方法来转换它。

由于您定义了t extends Number ,因此您可以对xy使用Number的任何方法。

因此,不要强制转换为double ,而是使用以下命令:

public static<t extends Number> double rand(t x,t y) {
  double a = x.doubleValue();
  double b = y.doubleValue();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM