Java Scala正在删除泛型类型信息

Java Scala正在删除泛型类型信息,java,scala,generics,scala-collections,scalac,Java,Scala,Generics,Scala Collections,Scalac,我有一个scala项目正在生成一个jar。我试图在Java项目中使用jar。奇怪的是,当方法签名被编译到.class文件时,它们正在丢失泛型类型信息 def foo(x:List[Long]) = ... 生成具有 Lscala/collection/immutable/List 在其.class文件中 对我来说也是 def foo(x:java.util.List[Long]) = ... .class文件表示方法签名是 Ljava/util/List 真正的问题是,当我在Java

我有一个scala项目正在生成一个jar。我试图在Java项目中使用jar。奇怪的是,当方法签名被编译到.class文件时,它们正在丢失泛型类型信息

def foo(x:List[Long]) = ...  
生成具有
Lscala/collection/immutable/List

在其.class文件中

对我来说也是

def foo(x:java.util.List[Long]) = ...  
.class文件表示方法签名是
Ljava/util/List

真正的问题是,当我在Java项目中使用这个jar时,我必须使用
List
,而不是我想要的
List
。当然我可以投,但我宁愿不投。有什么想法吗


我使用的是scala 2.11.7版

如果您希望您的方法能够以您想要的方式从Java调用,则必须声明它采用
列表[Java.lang.Long]

为什么??嗯,
scala.Long
相当于Java的
Long
,而不是Java的
Java.lang.Long
。在Java类型系统中,类型参数可能不引用基元类型,而只引用类型。因此Scala无法发出“正确”的签名,被迫退回到
java.lang.Object


(在非常旧的Scala版本中,它通常会退回到
java.lang.Long
,但不幸的是,这实际上不是一个100%正确的解决方案,并导致了一系列互操作问题。请参阅以获取大量详细信息。不幸的是,我不知道有更简洁的writeup。这种情况经常出现,因此如果有这样的writeup,我想使用它。)当然了!谢谢你!考虑使用<代码>数组[Loo]< /Cord>是个好主意,因为这将在爪哇被翻译成代码>长[] /Cord>。当然不总是可能的,但是它使java和Scala看起来都很好,没有丑陋的签名。