gpt4 book ai didi

kotlin - "Convert property getter to initializer"- 但它们不是一回事,是吗?

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

我将 IntelliJ 与混合 Java/Kotlin 项目一起使用。在我的一个 Kotlin 文件中,我有这个属性:

override val value: String
get() {
return webElement.getAttribute("value")
}
IntelliJ 的灯泡提供“将属性 getter 转换为初始化程序”,它将代码更改为:
override val value: String = webElement.getAttribute("value")
对我来说,这似乎不是一个简单的重构,而是一个重大的代码更改。我认为正在发生的是:
  • 在第一个版本中,value调用 value 时检索属性.
  • 在更改后的版本中,value构造类实例时立即设置属性,然后永远不会更改该类实例。

  • 但也许这更像是 C# 表达式体成员,它使用 lambda 箭头 =>而不是大括号和 return但除此之外的工作方式完全相同。
    那么……那是什么?第二版代码什么时候初始化?

    最佳答案

    您对这些陈述是正确的:

    • In the first version, the value property is retrieved when I call value.

    • In the changed version, the value property is set immediately when the class instance is constructed, and then never changes for that class instance.


    IntelliJ 的灯泡提供“将属性 getter 转换为初始化器”,因为它只是一个可用选项。灯泡仅突出显示您可以使用选定的代码执行的操作。
    IntelliJ 不会试图告诉您“属性初始化器”和“属性 getter ”是相等的。它告诉您的是,如果您愿意,可以将一种转换为另一种。
    我同意这令人困惑,尤其是考虑到 IntelliJ Idea documentation 中的这句话:

    As soon as the IDE finds a way to alter your code, it displays a yellow bulb icon in the editor next to the current line. By clicking this icon, you can view intention actions available for this unit of code. Intention actions cover a wide range of situations from warnings to optimization suggestions. You can view the full list of intentions and customize them in the Settings/Preferences dialog ⌘,.


    考虑到这一点,您的代码可能会被优化或有警告。
    答案

    When will the second version of the code initialize?


    ... immediately when the class instance is constructed.


    你是对的。

    关于kotlin - "Convert property getter to initializer"- 但它们不是一回事,是吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63611163/

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