- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我最近开始学习 Scala,并尝试在 Java 中使用我的 Scala 代码。导入的 jar 文件可以工作并包含我的类和方法;然而,当我发现在可用的导入类中,我可以访问 DiceRoller 和 DiceRoller$ 时,我感到有点惊讶,而且我还可以访问诸如此类的方法作为普通类中的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/
我尝试从 PDF 文件复制文本,但得到一些奇怪的字符。奇怪的是,Okular 可以识别文本,但不能识别 Sumatra PDF 或 Adobe,这三个应用程序都安装在 Windows 10 64
有人发现我的这个正则表达式有问题吗?我想要的只是找到任何出现的 并将其替换为用户选择的单词。这个表达式只改变一些出现的情况,当它改变时,它会删除前面的空格,我猜想将它与前面的单词连接起来。而且它也不应
数据带有奇怪的字符,例如 FS – Bronze FS – Gold FS – Silver FS – Wood FS – Bronze FS â€â€
我正在尝试创建一个给定字符串的函数,它会像下面所示那样处理该字符串,并修改结构变量的值。用简单的语言来说,给定一个字符串,它会修改变量的坐标。 typedef struct coo { int
什么意思: GLuint bindingPoint = 1, buffer, blockIndex; 我在一个我需要的教程中找到了这个,我以前从未见过这样的变量初始化。 这行是什么意思 GLuint
我有这个 A / \ B C \ / D A 有一个纯虚函数,原型(prototype)为: virtual A* clone(void) const = 0
我正在处理一个非常简单的问题,涉及设计分支。 请容忍我,而我用模糊的术语描述情况。 我有一个实体,称为 EntityA: EntityA{ attr1 : type1; attr2 : t
这里没什么太严肃的,只是好奇。 我想举个例子,想出了这段代码: const { Observable, Subject } = Rx const timeout$ = new Subject() co
这里没什么太严肃的,只是好奇。 我想举个例子,想出了这段代码: const { Observable, Subject } = Rx const timeout$ = new Subject() co
我在处理集成服务时遇到了一个奇怪的错误。 我的数据流包括: -> DESTINATION SOURCE -> SCRI
我在一个带有 Hibernate 的项目中使用 JPA,并且需要在纯 JDBC 级别上执行一些操作,因此我使用此方法来获取与数据库的连接: public class ConnectionUtil {
我有时会在(MySQL)数据库中看到我不明白其含义的值。这是一个例子: a:26:{i:0;s:2:"22";i:1;s:2:"24";i:2;s:1:"2";i:3;s:2:"26";i:4;s:1
我正在研究 Java 线程,我编写了这个创建多个线程并运行它们的小程序。在每个线程中,一个值会递增多次。我使用了 ThreadLocal 类,这样就不会出现资源争用。 来源: class MyValu
我正在用 C++ 构建一个模拟,我有一个指数生成器来生成进程的突发时间。 通常它会返回这样的值:3.14707,1.04998。但经常有 1/10 的情况出现这样的数字:2.64823e-307 这是
这是一个 fiddle : http://jsfiddle.net/e80fen4p/2/ 编辑:您可以突出显示所有结果 div,您会看到颜色变回它们应有的颜色。我猜这没有解决办法。如果仅通过突出显示
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在尝试一种基于指标的算法,称为 taxicab metric .然后我的目标是创建一个简单的例子,你有一个简单的 3x3 矩阵,在第一个位置你有 1。从中你计算其他位置的距离,如下所示: 1 2
我有以下项目设置 .... ├── lira │ ├── __init__.py │ ├── admin.py │ ├── ajax.py │ ├── authentication.p
如果我有一个正常的网站,这将是一个足够简单的修复...但我已经在 tumblr 上建立了我的网站,所以我需要一个解决方法。每个页面都使用相同的代码,因此任何解决方案脚本都将在每个页面上运行.. 不太明
var t = [-12, 57, 22, 12, -120, -3]; t.map(Math.abs).reduce(function(current, previousResult) {
我是一名优秀的程序员,十分优秀!