【发布时间】:2020-10-12 11:52:28
【问题描述】:
我是 Kotlin 的新手(对 Java 有一些经验)。在java中,每个函数(方法)都属于类(静态函数或实例函数)。在 Java 中 不可能 在类之外编写函数。在 kotlin 我看到这是可能的。我不明白从类函数调用函数(不属于类范围的一部分)是如何工作的。 谁能给我解释一下。 代码示例: 狼级:
class Wolf()
{
var image = "wolf.jpg"
var food = "meat"
val habitat = "forests"
fun makeNoise() {
println("Hooooow!")
addNumbers(5, 6)
}
}
不属于类的方法:
fun addNumbers (a:Int, b:Int): Int
{
return a+b
}
【问题讨论】:
-
这就是 kotlin 的工作原理?你能解释一下你不明白的地方吗? -> 知道 kotlin 编译为 java 字节码,其中文件中的每个函数都嵌套在自动生成的类中
-
@Lino,我不能理解很多事情: 1. 它的作用类似于类的静态函数吗? 2. 编译时,函数存放在哪里?它不是任何课程的一部分吗? 3、这个功能的作用范围是什么?它可以从任何地方调用还是只能从包中调用?我来自 OOP 知识,所以我真的很困惑
-
对于 1 和 2:当您在文件
file.kt中创建函数fun f() {}时,我假设它会创建类似 thisclass FileKt { public static void f() {} }的东西。对于 3:当您没有修饰符时,它是隐式public。还要注意static在kotlin中并不直接存在,你要么在类中有函数,要么只有函数,前者类似于实例方法,后者类似于静态方法 -
@Lino,你在上一句中提到的“后者”,这意味着虽然它不直接称为静态,但它的行为和“感觉”与 java 静态方法完全相同,但它没有t 属于任何类别?
-
它不属于 Kotlin 中的类,但在 Java 中确实。编辑:刚刚确认确实是这样。对于前面提到的示例,生成以下字节码:
public final class FileKt { public static final f() {} }
标签: java function class kotlin