Ответ лежит в декомпилированном байт-коде.Когда вы вызываете lateinitVar
, вы получаете доступ к полю с проверкой инициализации:
println("logProperty: " + lateinitVar)
компилируется в:
StringBuilder var10000 = (new StringBuilder()).append("logProperty: ");
String var10001 = this.lateinitVar;
if (this.lateinitVar == null) {
Intrinsics.throwUninitializedPropertyAccessException("lateinitVar");
}
String var1 = var10000.append(var10001).toString();
System.out.println(var1);
, но это:
println("logProperty: " + this::lateinitVar.isInitialized)
компилируется в:
String var1 = "logProperty: " + (((MyClass)this).lateinitVar != null);
System.out.println(var1);