如何将混合类型的 scala higher-kinder 类型特征与 java 泛型匹配?
how match mixed type of scala higher-kinder types feature with java generic type?
我的项目混合了java和scala语言,但是出现了一些类型不匹配的错误,我认为这是java和scala通信的常见问题。
我用简单的 classes 组织了舞台。环境是 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 class 就这么简单:
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 根本就没有 higher-kinded 类型。 MM
是higher-kinded的信息隐藏在@ScalaSignature
.
里面
当你写 Packet<Item>
时,你使用的是 raw type(反过来,它不能在 Scala 中表示);你不能在 newPacketInJava
.
中使用 Item<Something>
我的项目混合了java和scala语言,但是出现了一些类型不匹配的错误,我认为这是java和scala通信的常见问题。 我用简单的 classes 组织了舞台。环境是 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 class 就这么简单:
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 根本就没有 higher-kinded 类型。 MM
是higher-kinded的信息隐藏在@ScalaSignature
.
当你写 Packet<Item>
时,你使用的是 raw type(反过来,它不能在 Scala 中表示);你不能在 newPacketInJava
.
Item<Something>