DOES Kotlin生成されたバイトコードは、メソッドの数に影響を与えますか?

メル:

例えば、I使用の場合

methodReference = ::method

のではなく

methodReference = { method(it) }

コードが含まれています逆コンパイルgetOwnergetNamegetSignature反射によるJavaコード内のメソッドを、。これらの方法は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() {..}
   };

ラムダ(又は参考2)と同等の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) {..}
   });

違いは、メソッド参照およびラムダ1 +1、4 +1であるので、+1ブリッジ法から来ますinvoke(t:Any)

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=187706&siteId=1