使用Java代码中的Scala类型别名
假设我在scala中将类型别名定义为使用Java代码中的Scala类型别名,java,scala,scala-java-interop,type-alias,Java,Scala,Scala Java Interop,Type Alias,假设我在scala中将类型别名定义为 object Foo { type Bar = Option[String] } 看起来我不能在Java代码中这样引用别名(它只是抱怨找不到符号): 我也尝试过静态导入 (更具体地说,我有我无法更改的java反射代码,它需要知道参数类型,并且我需要向它提供Bar别名) 我知道,我可以在Scala中创建包装器 class BarWrapper(value: Bar) 但也许我遗漏了其他方法?类型别名仅对Scala编译器可见,与泛型类型一样,它们不会出现
object Foo {
type Bar = Option[String]
}
看起来我不能在Java代码中这样引用别名(它只是抱怨找不到符号):
我也尝试过静态导入
(更具体地说,我有我无法更改的java反射代码,它需要知道参数类型,并且我需要向它提供Bar别名)
我知道,我可以在Scala中创建包装器
class BarWrapper(value: Bar)
但也许我遗漏了其他方法?类型别名仅对Scala编译器可见,与泛型类型一样,它们不会出现在JVM类文件中的任何位置
如果您使用的是Java,那么您将无法使用unliased type
选项[String]
,因为javac无法知道您在Scala代码中声明的类型别名Bar
。无论您在哪里使用Bar
,只要使用Option[String]
(在Java中是scala.Option
),它应该可以正常工作。类型别名必须出现在JVM类文件中的某个位置,否则您将无法使用其他库中的别名。但据我所知,它们在类定义中的某些“附加数据”字段中被置乱。@Keros-这是一个很好的观点,但根据相同的逻辑,泛型类型签名信息也以某种格式包含在类文件中。无论他们在编译类型声明时使用什么格式,遗憾的是Java都无法识别这种格式。
class BarWrapper(value: Bar)