Kotlin конструктор по умолчанию - PullRequest
0 голосов
/ 02 октября 2018

документы говорят:

Если в JVM все параметры основного конструктора имеют значения по умолчанию, компилятор сгенерирует дополнительный конструктор без параметров, который будет использоватьзначения по умолчанию.Это облегчает использование Kotlin с такими библиотеками, как Jackson или JPA, которые создают экземпляры классов с помощью конструкторов без параметров.

Но, похоже, это не так:

Welcome to Kotlin version 1.2.71 (JRE 10.0.2+13-Ubuntu-1ubuntu0.18.04.2)
Type :help for help, :quit for quit
>>> class A(val x: Int = 1, val y: Int = 2)
>>> for (c in A::class.java.constructors) println(c)
public Line_0$A(int,int,int,kotlin.jvm.internal.DefaultConstructorMarker)
public Line_0$A(int,int)
>>> 

Чего мне не хватает?

1 Ответ

0 голосов
/ 02 октября 2018

Я думаю, что REPL запускает код kotlin как скрипт, который не компилируется полностью.

При запуске test.kt:

class A(val x: Int = 1, val y: Int = 2)
fun main(args: Array<String>) {
    for (c in A::class.java.constructors) println(c)
}

с

kotlinc test.kt -include-runtime -d test.jar
kotlin test.jar

он правильно печатает

public A(int,int,int,kotlin.jvm.internal.DefaultConstructorMarker)
public A()
public A(int,int)

При работе test.kts:

class A(val x: Int = 1, val y: Int = 2)
for (c in A::class.java.constructors) println(c)

с

kotlinc -script test.kts

он печатает

public Test$A(int,int,int,kotlin.jvm.internal.DefaultConstructorMarker)
public Test$A(int,int)

то жекак REPL.

Поэтому можно с уверенностью сказать, что он компилирует с конструктором без параметров.

...