Kotlin:隐式转换在哪些情况下发生?

问题描述 投票:1回答:1

我是科特林的初学者。我对Python最熟悉,在进入Kotlin之前,我只是通读了基本的Java教程https://docs.oracle.com/javase/tutorial/java/index.html

阅读Kotlin文档的这一部分时,我想到了一个问题

https://kotlinlang.org/docs/reference/basic-types.html#explicit-conversions

我从文档的以上部分了解到:

  • 对于分配=,会发生隐式类型转换。如果左侧类型是父类型或右侧类型的相同类型,则将编译代码。否则,这是一个编译错误。在IntLong的情况下,它们都是Number的子类型,但它们都不是彼此的子类型,因此隐式转换将不起作用。因此,我们需要使用.toLong()或.toInt()之类的方法来显式转换它们。

然后当我阅读零件时>

val l = 1L + 3 // Long + Int => Long

我开始怀疑在这种情况下是否会进行隐式类型转换。

文档说这与操作符重载有关。如何在引擎盖下实现此操作员超载?我试图在Github https://github.com/JetBrains/kotlin/blob/master/core/builtins/native/kotlin/Primitives.kt上找到源代码,但是这里只声明了函数而未实现。在哪里可以找到实现?

似乎操作重载实际上并没有执行类型转换。我们是否只是使用相同的名称但使用不同的参数类型签名来实现所有可能的函数,以便推断类型,然后选择具有匹配签名的函数?

还有一个普遍的问题:在Kotlin中,隐式转换究竟在什么情况下发生?

我是科特林的初学者。我对Python最熟悉,在进入Kotlin之前,我只是通读了基本的Java教程https://docs.oracle.com/javase/tutorial/java/index.html。 A ...

kotlin type-conversion
1个回答
0
投票
对于分配=,发生隐式类型转换。如果左侧类型是超类型或右侧类型相同,则代码将编译。
© www.soinside.com 2019 - 2024. All rights reserved.