假设我在scala中定义了类型别名为
object Foo {
type Bar = Option[String]
}
看起来我不能像那样在Java代码中引用别名(它只是抱怨找不到符号):
import Foo.*;
public class Cafebabe {
void bar(Bar x) {
//...
}
}
我也尝试过静态导入。
(更具体地说,我有java反射代码,我无法更改,需要知道参数类型,我需要将Bar别名提供给它)。
我知道,我可以在Scala中创建包装器
class BarWrapper(value: Bar)
但也许我错过了一些其他方式?
答案 0 :(得分:13)
类型别名仅对Scala编译器可见,并且与泛型类型一样,它们不会出现在JVM类文件中的任何位置。
如果您使用的是Java,则使用非混淆类型Option[String]
时会遇到困难,因为 javac 无法知道您在其中声明的类型别名Bar
你的Scala代码。无论您在何处使用Bar
,只需使用Option[String]
(在Java中为scala.Option<String>
),它应该可以正常工作。