Por ejemplo, si uso
methodReference = ::methoden vez de
methodReference = { method(it) } El código descompilado contendrá getOwner , getName , getSignature en código Java, debido a la reflexión. ¿Estos métodos cuentan contra el límite de 64k?
Los métodos se cuentan, solo si no son eliminados por proguard/R8
Un ejemplo
fun method(t : Any) {} val reference1: KFunction1<Any, Unit> = ::method val reference2: (Any) -> Unit = { method(it) } Para la reference1 , el código de bytes (descompilado a Java) sería:
@NotNull final KFunction reference1 = new Function1((X)this) { // $FF: synthetic method // $FF: bridge method public Object invoke(Object var1) {.. } public final void invoke(@NotNull Object p1) {..} public final KDeclarationContainer getOwner() {..} public final String getName() {..} public final String getSignature() {..} };para el lambda (o referencia2) el código java equivalente es:
@NotNull final Function1 reference2 = (Function1)(new Function1() { // $FF: synthetic method // $FF: bridge method public Object invoke(Object var1) {..} public final void invoke(@NotNull Object it) {..} }); Entonces, la diferencia es 4 +1 para la referencia del método y 1 +1 para lambda, donde +1 proviene de la invoke(t:Any)