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

标签 java scala generics types scala-java-interop

我的项目是混合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/

相关文章:

java - Icefaces 1.8 SelectInputText 字符串值自动完成

java - 带有 Cassandra 3.x 驱动程序的 Spring Boot

java - 更改我的正则表达式后,在线程 "main"java.lang.NullPointerException 中出现异常

java - 字节数组到某种 Java/Scala 图像。性能考虑

function - Scala -- 如何在非函数类型上使用仿函数?

scala - 如何克服scala NoSuchMethodError?

没有 undefined 的 TypeScript Partial<T> 类型

java - 在 Java 中计算协方差矩阵

scala - 将泛型类型放入 Scala 列表中

java - Java 中的泛型解释了应该接受任何类型的 vector 方法