在Kotlin中,如果我们将一些Kotlin字节码解压缩到Java中,我们通常可以看到这样的语句,它执行空检查:
Intrinsics.checkParameterIsNotNull(foo, "foo")如果我们深入研究,我们可以看到这个方法的反编译实现,它的实现与它的名称完全相同:
public static void checkParameterIsNotNull(Object value, String paramName) {
if (value == null) {
throwParameterIsNullException(paramName);
}
}由于这个类(Intrinsics)的存在,我不能在没有stdlib的情况下使用Kotlin,即使我尽力避免使用stdlib中的函数,它也会自动生成对Intrinsics.checkParameterIsNotNull的调用。
由于这个方法的实现非常短(而且经常出现),为什么这个函数没有内联呢?
是否有一些注释允许我们阻止Kotlin编译器生成这个空检查?(也许类似于@TrustedNotNull)
对于ProGuard:我很担心,因为我正在开发共享库,在这种情况下,ProGuard不适合我。我显然知道那些代码消除工具(ProGuard,dce),我知道如何和何时使用它们。
我只是问为什么一个函数不是内联的。
发布于 2017-12-16 09:28:26
我的猜测是,调用这个最后的方法比内联它更有效。
虽然代码看起来很简单,但它的字节代码相当长。内衬会损害效率。
https://stackoverflow.com/questions/47844098
复制相似问题