java-Kotlin生成的字节码是否会影响方法计数?

java-Kotlin生成的字节码是否会影响方法计数?,第1张

概述例如,如果我使用methodReference=::method而不是methodReference={method(it)}由于反射,反编译的代码将在Java代码中包含getOwner,getName,getSignature方法.这些方法是否计入64k限制?解决方法:仅当proguard/R8未删除这些方法时,这些方法才计算在内一个例子fun

例如,如果我使用

methodReference = ::method

而不是

methodReference = { method(it) }

由于反射,反编译的代码将在Java代码中包含getowner,getname,getSignature方法.这些方法是否计入64k限制?

解决方法:

仅当proguard / R8未删除这些方法时,这些方法才计算在内

一个例子

  fun method(t : Any) {}  val reference1: KFunction1<Any, Unit> = ::method  val reference2: (Any) -> Unit = { method(it) }

对于reference1,字节码(反编译为Java)为:

   @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() {..}   };

对于lambda(或reference2),等效的Java代码为:

   @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) {..}   });

因此,方法引用的区别是4 1,lambda的区别是1 1,其中1来自桥接方法invoke(t:Any)

总结

以上是内存溢出为你收集整理的java-Kotlin生成的字节码是否会影响方法计数?全部内容,希望文章能够帮你解决java-Kotlin生成的字节码是否会影响方法计数?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1092399.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存