【问题标题】:Alternative for deprecated new Double(double) [duplicate]替代已弃用的新 Double(double) [重复]
【发布时间】:2020-02-02 08:53:45
【问题描述】:

我正在关注 Walter Savitch 的一本书,名为 Absolute Java。其中的示例程序包含以下几行:

Double[] d = new Double[10];
for (int i = 0; i < d.length; i++)
    d[i] = new Double(d.length - i);

我收到以下警告消息:

警告:[弃用] Double 中的 Double(double) 已弃用

我相信警告消息告诉我替换使用构造函数,因为它已经被弃用了,那么我应该用什么替换它?

【问题讨论】:

  • 您的问题已在 Javadoc 中得到解答。
  • 这个问题问得很好,但是只要查一下Javadoc就可以回答了。这是在 SO 发布之前通常预期的事情。因此,由于缺乏研究,我不得不投反对票。请参阅How to Ask,谢谢。

标签: java wrapper deprecated


【解决方案1】:

说明

您应该将其替换为:

d[i] = Double.valueOf(d.length - i);

来自其Javadoc

已弃用

很少使用这个构造函数。静态工厂valueOf(double) 通常是更好的选择,因为它可能产生明显更好的空间和时间性能

一般来说,valueOf 并不强制总是返回 new 实例。它可以利用内部缓存并重新使用之前创建的值,从而使其更快。例如,如果您创建数百个1.0


注意

您首先使用Double[] 是否有特定原因?如果没有,请改用double[]。与对象包装器相比,这些原语速度更快,内存开销也更少。

那么你的代码就是:

double[] d = new double[10];
for (int i = 0; i < d.length; i++)
    d[i] = d.length - i;

顺便说一句,您应该永远不要省略花括号。即使你的循环只有一行。这是很难找到的错误的常见来源。

另外,你的变量命名不是很好。 d 是什么?尝试给它起一个反映其实际含义的名称。比如ages,如果它存储人的年龄。如果您没有特定的内容,可以使用values。这已经比d 更好了。尤其是因为是复数,所以很明显是多个值的数组。

double[] values = new double[10];
for (int i = 0; i < values.length; i++) {
    values[i] = values.length - i;
}

【讨论】:

  • 是的,使用 Double 有一个特定的原因,因为作者试图演示一个程序,该程序将使用由 Double 类实现的 Comparable 接口对任何类型的数据类型进行排序。
  • 公平,然后坚持Double[] :)
  • @Zabuza 但你可以使用d[i] = (double) (d.length - i);,它通过自动装箱隐式使用valueOf
【解决方案2】:

来自 Java 9 的构造函数方法是 Deprecated

已弃用。很少使用这个构造函数。静态工厂 valueOf(double) 通常是更好的选择,因为它可能会产生明显更好的空间和时间性能。 构造一个新分配的 Double 对象,该对象表示原始 double 参数。

所以替换为:

Double.valueOf(d.length - i)

【讨论】:

    猜你喜欢
    • 2020-05-24
    • 2013-07-23
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2012-01-24
    相关资源
    最近更新 更多