在 Kotlin 中显式指定类型与不显式指定类型有什么区别?

问题描述 投票:0回答:2

例如,这有什么区别:

var serviceItem: String = "Haircut"

还有

var serviceItem = "Haircut"
variables kotlin
2个回答
3
投票

您给出的示例是等效的。

但是,在许多情况下您可能需要明确指定它。

最简单的是如果您希望成员类型是超类:

val list: List<Foo> = ArrayList<Foo>()

另一种情况是,如果您有一些复杂的表达式,其中类型不明显,并且您希望它对于不在打开类型提示(例如代码审查)的 IDE 中查看它的人来说是显而易见的。在这种情况下,它也可以防错:您可能想确保不会意外地将其重构为 not

List<Foo>
:

val list: List<Foo> = foo.bar.getBaz().frobnicateWith(bar.foo)

有时,您尝试为初始化表达式的类型推断提供提示(在这种情况下,您必须使用

mutableListOf<Foo>()
:

val list: MutableList<Foo> = mutableListOf()

正如 gidds 在评论中指出的那样,如果初始化表达式是平台类型,你也可以这样做:

val foo = LinkedList<Int>().apply { add(1) }
val bar: Int = foo.first // bar would otherwise be of type Int!

2
投票

什么也没有。 Kotlin 为您管理类型声明,因此您无需指定类型。正如文档中提到的,它在类层次结构中很有用:

https://kotlinlang.org/docs/tutorials/kotlin-for-py/declaring-variables.html

明确指定类型

如果您确实愿意,您可以在同一个上初始化并指定类型 线。如果您正在处理类层次结构,这非常有用(更多信息 稍后)并且您希望变量类型成为值的基类型 班级:

val characters: CharSequence = "abc"
© www.soinside.com 2019 - 2024. All rights reserved.