【发布时间】:2016-04-05 04:13:02
【问题描述】:
我的项目是混合java和scala语言,但是会出现一些类型不匹配的错误,我认为这是java和scala通信方面的常见问题。 我用简单的课程组织了舞台。环境是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)
^
任何帮助或建议,谢谢。
【问题讨论】:
-
也就是说java如何表示scala的Packet[Item[_]]类型?
-
在 Scala 中添加实用程序方法是一种选择吗?这可能是最简单的解决方案。我不确定您是否可以在 Java 中表示更高种类的类型。
-
hi @0__ ,Item[ _ ] 应该代表 Java 中的更高种类的类型。看来我可能会避免 Java 代码返回更高类型的类型。无论如何,谢谢
标签: java scala generics types scala-java-interop