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

编程入门 行业动态 更新时间:2024-10-20 03:38:16
本文介绍了如何将Scala高阶类型特征的混合类型与Java泛型类型匹配?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我的项目是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泛型类型匹配?

本文发布于:2023-05-29 23:09:28,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/355091.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:类型   如何将   高阶   特征   Java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!