我的项目是Java和Scala语言的混合体,但是会出现一些类型不匹配错误,我认为这是Java和Scala交流方面的常见问题. 我用简单的班级安排了舞台.环境是Java 1.8和Scala 2.11.7
my project is mixed java and scala language, but some type mismatch error occur and I think it's a common problem in term of java and scala communicate. I organized the stage with simple classes. Environment is java 1.8 and 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 [_]]类型?
In other word, how does the java represent scala's Packet[Item[_]] type?
不是. Java根本没有更高类型的类型. MM种类较多的信息隐藏在@ScalaSignature内部.
It doesn't. Java simply doesn't have higher-kinded types. The information that MM is higher-kinded is hidden inside @ScalaSignature.
编写Packet<Item>时,您使用的是原始类型(因此,在Scala中代表);您不能在newPacketInJava中使用Item<Something>.
When you write Packet<Item>, you are using a raw type (which, in turn, can't be represented in Scala); you couldn't use Item<Something> inside newPacketInJava.
更多推荐
如何将Scala高阶类型特征的混合类型与Java泛型类型匹配?
发布评论