不推荐使用构造函数Integer(int)

DeS*_*ker 24 java

在工作的时候,我收到了这个警告(构造函数Integer(int)已被弃用)我无法在线找到替代构造函数/解决方案.我该如何解决这个问题?

Den*_*ret 38

您可以使用

Integer integer = Integer.valueOf(i);
Run Code Online (Sandbox Code Playgroud)

构造函数的javadoc:

已过时.使用此构造函数很少是合适的.静态工厂valueOf(int)通常是更好的选择,因为它可能会产生明显更好的空间和时间性能.构造一个新分配的Integer对象,该对象表示指定的int值.

主要区别在于,您不会总是获得一个新实例,valueOf因为缓存了小的Integer实例.

  • “new”关键字确实很不幸,因为它从外部控制实例构造。就像 Java 中的许多不好的东西一样,它是从 C++ 复制的:D `new` 可以与 Python 形成对比,其中新实例*总是*在工厂中构建 - 并且,@AndrewS,你的方式*会*在那里工作(并且确实有效) )。Pythonic 方法是使用语法“Integer integer = Integer(i);”,并让类“Integer”决定是返回新实例还是回收工厂中的一些旧实例或完全不同的实例。 (5认同)
  • 更不用说由于自动装箱,您甚至根本不需要使用“ valueOf(int)”。 (3认同)
  • @soc @Kayman “List.remove”方法*不是*“精神病患者”的产物,这只是有历史原因。虽然集合 API 是从 Java 1.2 开始的,但自动装箱是很晚才引入的,所以当时并没有歧义。虽然他们可以为这些方法选择不同的名称,但他们无法预测自动装箱。 (3认同)
  • 嗯,这是一个综合的例子,因为只有心理变态者才能使int和Integer重载,并使方法具有不同的逻辑。在某些特殊情况下,您可能会明确使用`valueOf(int)`,但我很难想出一些“自然的”东西。 (2认同)
  • @Kayaman我怀疑精心设计的代码很少需要使用该代码。但是我知道我们周围有很多精神病患者... (2认同)
  • @Kayaman Psychopaths正在编写集合API?:-) https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#remove-int- (2认同)
  • 因为构造函数总是会为新对象分配空间。这就是 Java 语言的工作原理。 (2认同)
  • @AndrewS 构造函数有一个明确的合同:他们构建一个新实例。为了能够重用实例,必须定义另一个函数。这里的弃用是一种“软”弃用:构造函数仍然可以使用并且不太可能消失,但它已被弃用,以便人们使用工厂函数,除非他们真的想要一个新实例(这种情况很少见)。 (2认同)