使用Java代码中的Scala类型别名

假设我在scala中定义了类型别名

object Foo { type Bar = Option[String] } 

看起来我不能像Java那样在Java代码中引用别名(它只是抱怨无法找到符号 ):

 import Foo.*; public class Cafebabe { void bar(Bar x) { //... } } 

我也尝试过静态导入。

(更具体地说,我有javareflection代码,我无法更改,需要知道参数类型,我需要将Bar别名提供给它)。

我知道,我可以在Scala中创建包装器

 class BarWrapper(value: Bar) 

但也许我错过了其他一些方式?

类型别名仅对Scala编译器可见,并且与generics类型一样,它们不会出现在JVM类文件中的任何位置。

如果您使用的是Java,那么您将使用非混淆类型的Option[String]因为javac无法知道您在Scala代码中声明的类型别名Bar 。 无论你在哪里使用Bar只需使用Option[String] (Java中的scala.Option ),它应该可以正常工作。