我的项目是混合java和scala语言,但会发生一些类型不匹配错误,我认为这是java和scala通信方面的常见问题。 我用简单的课程组织了舞台。环境是java的1.8和Scala 2.11.7如何匹配java类型的scala高级类型的混合类型?
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)
^
任何帮助或建议表示感谢。
换句话说,java如何表示scala的Packet [Item [_]]类型? – LoranceChen
在Scala中添加实用方法的一个选项?这可能是最简单的解决方案。我不确定你可以在Java中表示更高级别的类型。 –
hi @ 0__,Item [_]应该表示Java中较高类型的类型。看来我可能会避免Java代码返回一个更高的类型。谢谢反正 – LoranceChen