Jav*_*rSA 6

首先,void(在 Java 中)的等价物是Unit(在 Kotlin 中),函数返回的类型放在最后,所以你应该使用fun grow(): Unit { ... }代替fun void grow() { ... }。此外,您可以省略Unit并直接编写,fun grow() { ... }因为编译器知道您的函数不会返回任何有意义的值。

现在,我将尝试解释基础知识来回答您的问题并让您清楚一些。在 Java 中,构造函数的参数仅在该构造函数内部可见。在 Kotlin 中,参数仅在初始化块和属性初始化器中可见,除非您将它们转换为属性。让我们用例子来解释这一切。

在 Java 中,我们多次在类中看到这样的构造函数:

public class Person {
    public final String name;
    public final Integer age;

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
}
Run Code Online (Sandbox Code Playgroud)

参数用于初始化类的字段Person

在 Kotlin 中,等价物可能是:

a) 使用初始化程序块中的参数。

class Person(name: String, age: Int) {
    val name: String
    val age: Int

    init {
        this.name = name
        this.age = age
    }
}
Run Code Online (Sandbox Code Playgroud)

b) 使用类主体中声明的属性初始值设定项中的参数。

class Person(name: String, age: Int) {
    val name = name
    val age = age
}
Run Code Online (Sandbox Code Playgroud)

c) 直接在主构造函数中声明属性并初始化它们。

class Person(val name: String, val age: Int)
Run Code Online (Sandbox Code Playgroud)

因此,如果您编写varor val,构造函数的参数也将是属性,您将能够像在函数中一样在类中使用它们grow

所以,你的最终代码应该是:

class Apple(var weightInGrams: Float) {
    fun grow() {
        weightInGrams += 2.0f
    }
}
Run Code Online (Sandbox Code Playgroud)

var因为您要weightInGrams多次赋值。