Kotlin только что скомпилирован в байт-код Java. Для любых «специальных» функций, таких как расширения или нулевая защита, Kotlin просто внедряет некоторый код. Например, при нулевой защите код Kotlin может выглядеть следующим образом:
fun setPackageName(pName: String) {
//do something
}
Пока он компилируется в:
public final void setPackageName(@NotNull String pName) {
Intrinsics.checkParameterIsNotNull(pName, "setPackageName");
//do something
}
Если у вас есть переменная в Kotlin, с установщиком / получателем:
var something: Something? = null
get() {
return field
}
set(value) {
field = value
}
Kotlin просто преобразует всю установку в приватную переменную-член и некоторые методы:
private Something something;
public Something getSomething() {
return something;
}
public void setSomething(Something something) {
this.something = something;
}
Очевидно, что этот метод установки / получения довольно бесполезен, но он иллюстрирует, что может сделать Котлин.
По сути, Kotlin просто конвертирует себя в Java во время компиляции.