ice*_*000 5 inline kotlin kotlin-interop
在Kotlin中,如果我们将一些Kotlin字节码反编译为Java,我们经常会看到此语句执行空检查:
Intrinsics.checkParameterIsNotNull(foo, "foo")
Run Code Online (Sandbox Code Playgroud)
如果我们进一步研究,可以看到该方法的反编译实现,其实现与名称完全相同:
public static void checkParameterIsNotNull(Object value, String paramName) {
if (value == null) {
throwParameterIsNullException(paramName);
}
}
Run Code Online (Sandbox Code Playgroud)
由于该类(Intrinsics)的存在,没有stdlib我就不能使用Kotlin,即使我尽力避免使用stdlib中的函数,它也会自动生成对的调用Intrinsics.checkParameterIsNotNull。
由于此方法的实现非常短(并且经常出现),为什么不内联此函数?
是否有一些注释可以阻止Kotlin编译器生成此空检查?(也许像@TrustedNotNull)
对于ProGuard:我很担心,因为我正在使用共享库,而ProGuard在这种情况下不适合我。我显然知道那些代码消除工具(ProGuard,dce-js),并且知道如何以及何时使用它们。
我只是问为什么没有内联函数。
我的猜测是,调用这个最终方法比内联它更有效。
虽然代码看起来很简单,但它的字节码却相当长。内联它会损害效率。
| 归档时间: |
|
| 查看次数: |
814 次 |
| 最近记录: |