9

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

object Foo {
  type Bar = Option[String]
}

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

import Foo.*;

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

我也尝试过静态导入。

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

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

class BarWrapper(value: Bar)

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

4

1 回答 1

14

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

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

于 2012-12-02T21:58:34.200 回答