Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java代码中的Scala类型别名_Java_Scala_Scala Java Interop_Type Alias - Fatal编程技术网

使用Java代码中的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编译器可见,与泛型类型一样,它们不会出现

假设我在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)