我的项目是混合java和scala语言,但是出现了一些类型不匹配错误,我认为这是java和scala通信方面的常见问题。 我用简单的类(class)组织了舞台。环境是java 1.8和scala 2.11.7
class Item[+T](name: String)
//ready use Item as MM type
class Packet[+MM[_]]
object GenS extends App {
//use Item class
def doWithPacket(packet: Packet[Item]) = {}
//type error occur on packetFormJava variable form java
val packetFormJava = GetGenJ.newPacketInJava
doWithPacket(packetFormJava)
//run well
val packetFromScala = new Packet[Item]
doWithPacket(packetFromScala)
}
java 类就这么简单:
public class GetGenJ {
public static Packet<Item> newPacketInJava() {
return new Packet<Item>();
}
}
编译遇到错误:
Error:(16, 16) type mismatch;
found : Packet[Item[_]]
required: Packet[Item]
doWithPacket(packetFormJava)
^
任何帮助或建议,谢谢。
最佳答案
In other word, how does the java represent scala's Packet[Item[_]] type?
事实并非如此。 Java 根本就没有更高级的类型。信息是MM
更高级的隐藏在里面@ScalaSignature
.
当你写Packet<Item>
时,您正在使用raw type (反过来,它不能用 Scala 表示);你不能使用Item<Something>
里面newPacketInJava
.
关于java - 如何将scala高级类型功能的混合类型与java泛型类型相匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34542191/