gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:07:43 24 4
gpt4 key购买 nike

例如,如果我使用

methodReference = ::method

而不是

methodReference = { method(it) }

由于反射,反编译后的代码会包含Java代码中的getOwnergetNamegetSignature方法。这些方法是否计入 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 生成的字节码会影响方法计数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55420856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com