nulo o vacío lambda como valor pnetworkingeterminado

qué solución es mejor? ¿usa lambda nullable o pasa lambda vacío como parámetro pnetworkingeterminado? kotlin optimizaría de alguna manera vacía lambda? o crear una nueva instancia que no haga nada?

class Test1(val action: () -> Unit = {})

Lamentablemente, no entiendo el código de bytes generado. Analicemos

val test11 = Test1()

después de la descompilation nos da

private static final Test1 test11 = new Test1((Function0)null, 1, (DefaultConstructorMarker)null);

y finalmente como un lambda se pasa algo como esto

var1 = (Function0)null.INSTANCE;

editar: las preguntas ocultas son: ¿cómo trata Kotlin lambda vacía como valor pnetworkingeterminado?

Definitivamente es más idiomático pasar un lambda vacío en lugar de nulo como valor pnetworkingeterminado para un parámetro lambda.

El decomstackdor utilizado en IntelliJ IDEA no siempre maneja bien el bytecode de Kotlin, por lo que lo que ve en su salida en este caso no refleja lo que realmente ocurre. En realidad, el lambda vacío se comstackrá en una class anidada de singleton que implementa la interfaz de la FunctionN correspondiente con un cuerpo vacío, y la instancia de singleton se usará como el valor pnetworkingeterminado.

Consulte mis diapositivas de charla para get más información sobre cómo se implementan los parameters pnetworkingeterminados en Kotlin.

  • Pasando lambda en lugar de interfaz
  • ¿Pasar lambdas a Observable.subscribe en kotlin dará como resultado pérdidas de memory?
  • ¿Cómo funciona el generador htmlx de kotlin exactamente debajo del capó?
  • Tratando de entender el ejemplo de Kotlin
  • Kotlin filter lambda array usando el índice de iteración
  • Cuando los parameters lambda deben ser noinline en Kotlin?
  • Usar interfaces funcionales con types de funciones en Kotlin
  • Kotlin lambda con Interface como argumento
  • Kotlin - Lista dentro de un filter de list
  • Kotlin, tabla / matriz basada en inputs con campos dynamics
  • Parámetros de Clase abstracta vs. Lambda