gpt4 book ai didi

java - 解释有关自动包装(基元和包装器)的 groovy 文档

转载 作者:行者123 更新时间:2023-12-02 03:39:06 25 4
gpt4 key购买 nike

以下是 Groovy 文档的摘录 Differences from Java部分:

  • 基元和包装器
  • 因为 Groovy 使用对象来处理所有事情,所以它会自动包装对基元的引用。因此,它不遵循 Java 的加宽优先于装箱的行为。这是一个使用 int 的示例

    int i
    m(i)

    void m(long l) {
    println "in m(long)"
    }

    void m(Integer i) {
    println "in m(Integer)"
    }

    对此没有太多解释。我无法将其粘贴到 groovysh 中并显示任何效果。

    我真的是 Groovy 新手,并试图理解它的用例。

    最佳答案

    与其说它是一个“用例”类型的东西,不如说它只是定义了行为是什么。在您发布的示例中,两个方法 m 都是使用 i 作为参数调用的有效方法,因此编译器需要选择一个。

    在Java中,它会更喜欢加宽(将数字类型转换为更大的数字类型,例如intlong)而不是< em>装箱(将原始(非对象)类型放入对象框中,例如intInteger)。因此,Java 中的等效代码将执行需要 long 的方法。

    但是,在 Groovy 中,基元已经包装在其等效对象中,因此不需要进行装箱。这意味着 Integer 方法被视为完全匹配,因此会选择 long 版本。

    采用一种方式相对于另一种方式并没有真正的优势;他们所做的只是定义行为是什么,这样调用哪个版本就不是未定义的行为。它在文档的该部分中得到了特别注意,因为 Groovy 中最有意义(并且最一致)的行为与 Java 中发生的行为不同。

    关于java - 解释有关自动包装(基元和包装器)的 groovy 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37055883/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com