Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin &引用;将属性getter转换为初始值设定项";-但它们不是';这不是一回事,是吗?_Kotlin_Intellij Idea - Fatal编程技术网

Kotlin &引用;将属性getter转换为初始值设定项";-但它们不是';这不是一回事,是吗?

Kotlin &引用;将属性getter转换为初始值设定项";-但它们不是';这不是一回事,是吗?,kotlin,intellij-idea,Kotlin,Intellij Idea,我将IntelliJ用于一个混合Java/Kotlin项目。在我的一个Kotlin文件中,我有以下属性: override val value: String get() { return webElement.getAttribute("value") } IntelliJ的灯泡提供“将属性getter转换为初始值设定项”,这将代码更改为: override val value: String = webElement.getAttribu

我将IntelliJ用于一个混合Java/Kotlin项目。在我的一个Kotlin文件中,我有以下属性:

override val value: String
    get() {
        return webElement.getAttribute("value")
    }
IntelliJ的灯泡提供“将属性getter转换为初始值设定项”,这将代码更改为:

override val value: String = webElement.getAttribute("value")
对我来说,这似乎不是一个简单的重构,而是一个重大的代码更改。我认为正在发生的是:

  • 在第一个版本中,调用
    value
    时会检索
    value
    属性

  • 在已更改的版本中,在构造类实例时立即设置
    属性,然后再也不会更改该类实例

但这可能更像是C#表达式体成员,它使用lambda箭头
=>
而不是大括号和
返回
,但在其他方面工作方式完全相同


那么…是哪一个?代码的第二个版本何时初始化?

关于以下语句,您是正确的:

  • 在第一个版本中,调用value时检索value属性

  • 在已更改的版本中,在构造类实例时立即设置value属性,然后再也不会更改该类实例的value属性

IntelliJ的灯泡提供“将属性getter转换为初始值设定项”,因为它只是一个可用的选项。灯泡仅突出显示您可以使用选定代码执行的操作

IntelliJ并没有试图告诉您“属性初始值设定项”和“属性获取项”是相等的。它告诉你的是,如果你愿意,你可以把一个转换成另一个

我同意这是令人困惑的,特别是考虑到以下引用:

只要IDE找到修改代码的方法,它就会在编辑器中当前行旁边显示一个黄色灯泡图标。通过单击此图标,可以查看此代码单元的可用意图操作。意向行动涵盖从警告到优化建议的广泛情况。您可以查看意图的完整列表,并在“设置/首选项”对话框中对其进行自定义⌘,.

考虑到这一点,您的代码可能会被优化或出现警告

答案 代码的第二个版本何时初始化

。。。在构建类实例时立即执行


你说得对。

这证实了我的怀疑,即我应该忽略这个建议。这是一个Selenium项目,因此预先初始化几乎总是错误的。Mulțumesc frumos ptr。阿胡托!很好的解释。IntelliJ建议您可以对代码执行的操作;它们不一定是你应该做的事情。(尽管它们经常值得考虑)许多保留了确切的含义——这是其中一个没有保留的含义。@RyanLundy,cu plăcere@吉兹,谢谢你。这样一个问题提醒我们,任何事情都不应该盲目地去做。但是将带有
return
的函数转换为表达式体是一样的,不是吗?您可以编写
override val value:String get()=webElement.getAttribute(“value”)
,这相当于第一个版本。