Mal*_*ngh 1 syntax compiler-errors compilation syntax-error kotlin
这是一个错误:
class Apple(weightInGrams: Float){
fun grow() {
weightInGrams+= 2.0f
}
}
Run Code Online (Sandbox Code Playgroud)
首先,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多次赋值。
| 归档时间: |
|
| 查看次数: |
712 次 |
| 最近记录: |