【问题标题】:Why const keyword is not used in Java? [duplicate]为什么 Java 中不使用 const 关键字? [复制]
【发布时间】:2011-09-15 09:03:31
【问题描述】:

可能重复:
Why is there no Constant keyword in Java?

为什么在 Java 中不使用 const 关键字?
你能看出在 Java 语法中使用一些 transitive const or immutable 关键字有什么缺点吗?或者为什么选择了 common cumbersome approach

您能否了解关闭request原因,Sun 是否提供任何解释?

【问题讨论】:

  • 你想让const做什么?显然不是final(否则它会是多余的)。但肯定不会让引用的对象自动不可变?
  • 那个!使引用的对象自动不可变!由于 D 编程语言已经实现。我很清楚为什么 goto 被“弃用”(保留且未使用)但为什么 const 直到现在还不是 Java 规范的一部分?.. 有什么原因吗?
  • 维基百科说 JCP 发现它“不可能实现”(以向后兼容的方式)

标签: java


【解决方案1】:

您能否看到关闭请求的原因,Sun 是否提供任何解释?

是的。 Sun 在request itself 中提供了他们不会对请求采取行动的 3 个原因。我引用:

“目前没有计划将此功能添加到 Java。在 除了creeping featurism,我们看到以下问题 使用此功能:

  1. 现在添加 const 为时已晚。如果这是从 1.0 添加的, 情况可能会有所不同。

  2. const 污染:C++ 方法需要所有 const 方法 用 const 关键字标记。这意味着大多数 方法必须显式标记为 const。这种倾向 使 C++ 中的所有方法变得混乱。

  3. 兼容性是JDK的一个非常重要的特性。 可以说,集合类应该修改为 表示元素是 const。那会 要求更新所有现有的实现 同样的方式,有效地打破了所有现有的非JDK 集合接口的实现。相似地, hashCode 必须是 const,打破当前 字符串的实现。”


更新

出于好奇,我花了几分钟浏览Project COIN mailing list 的主题行。令我惊讶的是,没有人愿意建议const。 (或者如果他们这样做了,我错过了。)

因此,要么不再有人(足够)关心这个想法,要么拥有足够专业知识来制定项目 COIN 提案的人认识到它不可能通过集合。

【讨论】:

  • +1。我想第三个原因是最大的一个。我不完全理解第二个,如果它是相关的,但第一个是(没有进一步解释)有点挥手(如果它们本身没有问题,为什么功能为时已晚,并且为什么这不适用于泛型和闭包,它们也带来了相当大的变化)。
  • @Thilo - 我同意原因 1 和 2 不是很好。但它们是 Sun 提供的理由。这是 OP 要求的。
  • 无法理解这个想法(真的尝试过)。在提供额外的可选方式以强制编译器(和帮助开发人员)检查某些标记为不可变的变量是否不用作“左手”值时,看不到任何破坏的向后兼容性或代码污染。
  • @Mykhaylo Adamovych - 我只是引用了 Sun 所说的话。我不会假装理解所涉及的所有问题,但我敢肯定它并不像你想象的那么简单......
【解决方案2】:

它没有被使用,因为它在 Java 中没有任何功能。我引用Wikipedia

虽然在 Java 中保留为关键字,但没有使用 const 并且没有 功能。

因此,您应该改用final

Here 是另一个可能更可靠的来源。

【讨论】:

    【解决方案3】:

    其实the Wikipedia article you linked有你的答案:

    Java 社区进程中存在用于实现 const 正确性的增强请求票,但在 2005 年被关闭,理由是不可能以向后兼容的方式实现

    【讨论】:

    • 也许我们会得到一些其他的代码纠正工具,比如@Nullable@NotNull等等。
    • 不可变数组也不错。但我想也没有机会。
    【解决方案4】:

    使用final 关键字。

    它将为您做与const 关键字相同的事情。

    【讨论】:

    猜你喜欢
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 2014-12-05
    • 2019-12-07
    • 2015-10-20
    相关资源
    最近更新 更多