gpt4 book ai didi

java - 在 Java 中导入 Scala : weird classes & methods showing

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:43 25 4
gpt4 key购买 nike

我最近开始学习 Scala,并尝试在 Java 中使用我的 Scala 代码。导入的 jar 文件可以工作并包含我的类和方法;然而,当我发现在可用的导入类中,我可以访问 DiceRollerDiceRoller$ 时,我感到有点惊讶,而且我还可以访问诸如此类的方法作为普通类中的attribute_$eq

DiceRoller 在 Scala 中被定义为 object,其余类被定义为 class,如果这可以阐明问题的话。

我也知道关于匿名类和函数的基本理论,以及 Scala 如何考虑诸如“==”函数之类的操作,所以这不是我的重点,尽管它可能是相关的。

当我导入 Java 包时,无法访问这些类和方法。那么,为什么我在导入 Scala jar 文件时可以调用它们呢?我可以将那些匿名类和方法声明为私有(private)的吗?

最佳答案

JVM 对 Scala 一无所知。 Scala 编译器必须以某种方式将 Scala 构造映射到 JVM 构造。

例如,JVM 没有对象,因此 Scala 编译器将对象映射到具有单例实例的类。

JVM 也没有特征,因此必须将特征映射到类。 (实际上,traits 的映射是相当复杂的,事实上,traits 被映射到多个类。)

在 Scala 中,字段可以被方法覆盖,在 JVM 中,它们不能。因此,Scala 字段必须映射到可以被方法覆盖的东西,这就是方法。

另请注意,您的 Java IDE 对 Scala 如何将 Scala 构造编码为 JVM 构造一无所知。例如,JVM 对匿名类一无所知,因此 Java 编译器将匿名类编码为具有奇怪名称的常规命名类。 Java IDE 知道这些奇怪的名称但不会显示它们,但 Java IDE 不知道 Scala 编译器使用的名称。

JVM 对函数一无所知。现在,Java 8 有了一流的功能,并且有一个 Java IDE 可以理解的标准化编码,但是 Scala 在 Java 拥有一流的功能之前就已经有了一流的功能,他们提出的编码与 Java 设计者的编码不同想出了。 (不过,这将在下一版本的 Scala 中改变。)

请注意,同样的事情也发生在 Clojure、Groovy、Python、Ruby、JavaScript、Fantom、Kotlin 和所有其他 JVM 语言中。 Java 工具根本不知道它们。

关于java - 在 Java 中导入 Scala : weird classes & methods showing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30692785/

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