上肢和下肢上肢的Kotlin类属性

时间:2018-10-09 21:45:37

标签: kotlin

只需阅读一些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)
}

它们之间有什么区别,什么时候应该使用?

1 个答案:

答案 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不能更改-与此处的常量相似。

因此,如果您希望属性是不可变的(但对于该类的所有实例而言不是恒定的),则需要在()-构造函数中对其进行定义。