java - void 函数/属性调用在哪里执行?

标签 java kotlin compilation

代码如下:

fun main(args: Array<String>){
    val items = listOf(1, 2, 3, 4)
    items.first() 
    items.last() 
    items.filter { it % 2 == 0 }  
}

我有一些扩展方法,例如 first()last() - 但它们没有执行任何操作(没有分配给任何变量)。这是否意味着编译器只是跳过它们并且不执行任何操作?

最佳答案

but they arn't doing anything (not being a assigned to a variable of anything)

据编译器所知,它们可能会产生副作用(例如打印某些内容或设置字段),在这种情况下它们必须被执行。如果他们是inline ,编译器可能会在内联后消除它们,正如 Josh 的回答提到的那样。但它们不是,因此编译器不能依赖它们的定义(而不是签名):在运行时可能有一个不同的 JAR 包含这些方法并用副作用定义它们。

但是,如果您运行此代码足够长的时间,JIT 很可能会内联它们,然后消除它们;只是不是立即。

原则上可能有contracts将这些方法声明为纯方法,然后编译器可以消除它们。但据我所知,当前的契约(Contract)不支持这一点。

关于java - void 函数/属性调用在哪里执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54837419/

相关文章:

java - Kotlin 模块源未打包在 aar 中

java - 如何使用 mongodb 的 morphia 更新/保存包含引用的文档?

java - 在哪里可以获得正确的 Cassandra Thrift API jar 文件?

java - 发送多个 request.getRequestDispatcher()

android - 如何使用Databinding实现ExoPlayer?

Kotlin 使用 Android Studio 查找代码中的所有硬编码字符串

Android构建gradle文件版本号自动递增

android-studio - 有哪些编译错误以及如何解决它们?

用于比较 tarball、SRPM 和源代码文件的 Linux 软件

剪辑汇编