【问题标题】:Deprecated Short(String) how to update?不推荐使用的 Short(String) 如何更新?
【发布时间】:2021-04-14 14:42:04
【问题描述】:

我正在处理这个问题:

produto.setQuantidade(new Short("7"));

Short 带有标记已弃用。如何为以上 Java 9 版本更新此内容? (现在,我有 Java 11)

【问题讨论】:

  • 附带说明,是否有理由在这里解析字符串?为什么不使用produto.setQuantidade((short)7);
  • 文档存在
  • 在使用getter和setter时需要区分Integer、BigInt和Short。

标签: java deprecated java-11 short


【解决方案1】:

您应使用Short.valueOf。这取自javadoc

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

注意:公共构造函数已启动 forRemoval 开始 Java-16。

【讨论】:

  • 我想知道forRemoval 是否真的意味着删除,或者他们只是想吓唬更多人不要使用它们。 JDK 作者几乎从不会在没有充分理由的情况下破坏向后兼容性。这些类也没有维护负担。我想知道我们是否看到了一个转折点,他们最终摆脱了 25 年来积累的一些垃圾。
  • 没错,但是,我在源代码中没有看到forRemoval(还没有?在这里参考hg.openjdk.java.net/jdk/jdk/file/ee1d592a9f53/src/java.base/…)。因此,可能需要与编辑核实他从何处获得该信息。
  • produto.setQuantidade(Short.valueOf("7"));非常感谢,它在 JUnit 中很好用。休眠:从 Fabricante this_ where this_.codigo = 中选择 this_.codigo 作为 codigo1_3_0_,this_.descricao 作为 descrica2_3_0_ Hibernate:插入 Produto (descricao, fabricante, preco, quantidade) 值 (?, ?, ?, ?)
  • @Michael 这些构造函数在 JDK 9 中被标记为“deprecated”,在 JDK 16 中被标记为“deprecated, for remove”。那是相当长的一段时间以及保持向后兼容性的版本,并且在某些时间和版本中构造函数仍然存在,但标记为“已弃用,以移除”。完全摆脱这些构造函数是有充分理由的。这些包装类是 值类型 或任何将这些对象视为原始值(即没有特定对象标识)的未来机制的自然候选者。这与支持new 不兼容。
  • @Michael 我当然记得,LogManager.addPropertyChangeListenerremovePropertyChangeListenerremoved in Java 9。我记得是因为 a) 你的权利,“它几乎永远不会发生”和 b) 它发生得很快,在 JDK 8 中被弃用,在 JDK 9 中被删除。不过,我认为,更改 new 的语义会比删除更具破坏性一些构造函数。
猜你喜欢
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-20
  • 2015-07-29
相关资源
最近更新 更多