当我在全局范围内声明一个变量时:
//global scope
val name: String = "sevban" //here there is no warning about explicit type redundancy
编译器不会抱怨显式类型冗余,而我在函数中声明了一个局部变量:
//in a function
fun foo() {
val name: String = "sevban" //it does complain about explicit type redundancy
}
造成这种差异的原因是什么?为什么类型推断看起来像是随机的?
1条答案
按热度按时间5sxhfpxr1#
我们可能只能推测,因为他们的决定没有在文档中解释,除非这已经在YouTrack上的问题列表中讨论过。
但我假设这是因为在全局范围内,可能有一个原因需要显式地描述类型:更改类型可能会中断使用该属性的其他文件中的代码。例如,在上面的代码中,看到您将其公开为String可能会让您犹豫是否将其更改为其他类型的CharSequence,而不检查它可能影响的其他代码。
对于函数中的局部变量,不太需要担心通过更改类型来破坏代码,因为破坏的代码将在您正在处理的同一个函数中。当类型与推断的类型完全匹配时,显式地放置类型可能会被认为会使代码变得混乱,并使其可读性降低,尽管这是一个观点问题。
这个原因对于你的第三个代码示例没有意义,但至少在Kotlin 1.8.21中,我没有看到这个警告。他们可能已经注意到,它不应该是一个警告比你正在使用的版本更近。