gpt4 book ai didi

java - JVM:Scala 的 JavaConversions 如何在 Java 代码中工作?

转载 作者:搜寻专家 更新时间:2023-11-01 03:16:46 24 4
gpt4 key购买 nike

我了解 Scala 的 JavaConversions添加各种 Java 和 Scala 集合之间的隐式转换。我了解它在 Scala 中的工作原理,使用 implicit关键字。

但是,就我而言,我正在运行一些 Java 代码,它在顶部:

import scala.collection.JavaConversions;

现在不知何故,似乎是变魔术了,在顶部使用 import 会在使用 Java 集合时更改下面的代码。

比如我有一个方法:

public static Collection<String> foo() { return ... }

如果我从外部调用该方法,我返回的 Collection 实例会被……以某种方式改变。它添加了额外的方法。通过某种我不理解的机制,该代码——根本不涉及 Scala 或 JavaConversions——导致类加载器引入 Scala 类。

它是如何工作的?

Java 语言本身没有implicit 关键字或扩展方法,但Scala 有。不知何故,导入 Scala 库是在做一些(大概)不能用 Java 表达但仍受 JVM 支持的低级操作。

  • 遇到 import 时会发生什么?
  • Scala 如何向现有的 Java 类添加方法?
  • 这里涉及的时间是什么时候? import 时、类加载时或其他情况下是否发生了什么?

最佳答案

在 Scala 编译时,一切都发生得比这一切都早得多。 The Scala compiler attempts to insert a call to an implicit method as a "view" in some cases that would otherwise be type errors .

您从 foo() 返回的 Collection 只是一个普通的旧 Collection[String]。当您它用作 Scala 集合时,Scala 编译器会插入一个额外的方法调用。因此,如果您编写 foo().headOption,这将编译为与您编写的相同的 Java 字节码在运行时。

关于java - JVM:Scala 的 JavaConversions 如何在 Java 代码中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47540104/

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