メル:
例えば、I使用の場合
methodReference = ::method
のではなく
methodReference = { method(it) }
コードが含まれています逆コンパイルgetOwner
、getName
、getSignature
反射による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)