Свойства класса Kotlin при паратезе и кудрявом паратезе - PullRequest
0 голосов
/ 10 октября 2018

Просто читая некоторый код 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 голосов
/ 10 октября 2018

Если вы преобразуете 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 изменить нельзя - он похожздесь константа.

Таким образом, если вы хотите, чтобы свойство было неизменным (но не постоянным для всех экземпляров этого класса), вам необходимо определить его в () - в конструкторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...