gpt4 book ai didi

java - 如何将scala高级类型功能的混合类型与java泛型类型相匹配?

转载 作者:行者123 更新时间:2023-11-30 07:41:53 30 4
gpt4 key购买 nike

我的项目是混合java和scala语言,但是出现了一些类型不匹配错误,我认为这是java和scala通信方面的常见问题。我用简单的类(class)组织了舞台。环境是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)
^

任何帮助或建议,谢谢。

最佳答案

In other word, how does the java represent scala's Packet[Item[_]] type?

事实并非如此。 Java 根本就没有更高级的类型。信息是MM更高级的隐藏在里面@ScalaSignature .

当你写Packet<Item>时,您正在使用raw type (反过来,它不能用 Scala 表示);你不能使用Item<Something>里面newPacketInJava .

关于java - 如何将scala高级类型功能的混合类型与java泛型类型相匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34542191/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com