繁体   English   中英

如何将Scala高阶类型特征的混合类型与Java通用类型匹配?

[英]how match mixed type of scala higher-kinder types feature with java generic type?

我的项目是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 [_]]类型?

没有。 Java根本没有更高类型的类型。 MM风格较高的信息隐藏在@ScalaSignature

编写Packet<Item> ,您使用的是原始类型 (而原始类型又不能在Scala中表示); 您不能在newPacketInJava使用Item<Something>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM