gpt4 book ai didi

scala - 使用 Java 的包对象中定义的 Scala 类

转载 作者:行者123 更新时间:2023-12-04 14:28:03 25 4
gpt4 key购买 nike

以下 Scala 示例在包对象中定义了一个类:

package com.mycompany

package object test {
class MyTest {
def foo(): Int = {
42
}
}
}

生成以下三个类:
com/mycompany/test/package.class
com/mycompany/test/package$.class
com/mycompany/test/package$MyTest.class

尝试使用 MyTest 时出现问题来自Java的类。我认为自从 package$MyTest名称中包含 $,Java 不承认它的存在。尽管如此, package$类是可访问的。

运行 javappackage$MyTest.class返回:
Compiled from "Test.scala"
public class com.mycompany.test.package$MyTest {
public int foo();
public com.mycompany.test.package$MyTest();
}

我尝试使用 Eclipse、Intellij 和 Netbeans 访问该类,但没有成功。
是否可以使用在 Java 的包对象中定义的 Scala 类?

最佳答案

中定义一个类包对象 test当前的实现方式与在 中定义它的方式不同包裹 test ,尽管它可能应该(这被跟踪为 SI-4344 )。

正因为如此,通常好的做法是将不能是顶级的定义放入包对象中,例如 vals、defs 等(毕竟这是包对象的重点),并将类/对象定义留在一个普通的包定义:

package com.mycompany

package object test {
// vals, defs, vars, etc.
val foobar = 42
}

package test {
// classes, objects, traits, etc.
class MyTest {
def foo(): Int = {
42
}
}
}

这将产生一个正常的 MyTest类,可从 Java 轻松访问:
com/mycompany/test/MyTest.class
com/mycompany/test/package.class
com/mycompany/test/package$.class

关于scala - 使用 Java 的包对象中定义的 Scala 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23170058/

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