只需阅读一些Kotlin代码,请注意我们可以在(...)
或{...}
中定义属性。
class Foo(val name: String = "Yuchen") {
val name2: String = "Zhong"
}
fun main(args: Array<String>) {
val foo = Foo()
println(foo.name)
println(foo.name2)
}
它们之间有什么区别,什么时候应该使用?
答案 0 :(得分:1)
如果使用字节码反编译器将 kotlin 代码转换为 java ,您将获得该代码。
class InitOrderDemo(val name: String = "Yuchen") {
val name2: String = "Zhong"
}
反编译的Java代码:
public final class InitOrderDemo {
@NotNull
private final String name2;
@NotNull
private final String name;
@NotNull
public final String getName2() {
return this.name2;
}
@NotNull
public final String getName() {
return this.name;
}
public InitOrderDemo(@NotNull String name) {
Intrinsics.checkParameterIsNotNull(name, "name");
super();
this.name = name;
this.name2 = "Zhong";
}
....
}
请注意,您可以通过构造函数调用传递name
参数,但是name2
不能更改-与此处的常量相似。
因此,如果您希望属性是不可变的(但对于该类的所有实例而言不是恒定的),则需要在()
-构造函数中对其进行定义。