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

时间:2012-12-02 21:05:41

标签: java scala scala-java-interop type-alias

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

object Foo {
  type Bar = Option[String]
}

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

import Foo.*;

public class Cafebabe {
  void bar(Bar x) {
  //...
  }
}

我也尝试过静态导入。

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

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

class BarWrapper(value: Bar)

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

1 个答案:

答案 0 :(得分:13)

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

如果您使用的是Java,则使用非混淆类型Option[String]时会遇到困难,因为 javac 无法知道您在其中声明的类型别名Bar你的Scala代码。无论您在何处使用Bar,只需使用Option[String](在Java中为scala.Option<String>),它应该可以正常工作。