scala typetag java,scala - 从Java重写scala方法时的TypeTag推断 - 堆栈内存溢出

博客讨论了在Scala和Java之间调用方法时遇到的问题,特别是关于Scala的TypeTag。在尝试从Java覆盖Scala的P2pRpc.request()方法时,由于TypeTag的使用导致编译错误。文章探讨了如何在Java中获取Scala的TypeTag等价物,以实现跨语言互操作性。
摘要由CSDN通过智能技术生成

给定以下scala基类:

trait P2pRpc {

import reflect.runtime.universe.TypeTag

def request[U: TypeTag, V: TypeTag](req: P2pReq[U]): P2pResp[V]

}

P2p类是:

abstract class P2pMessage[T] extends _root_.java.io.Serializable {

def value(): T

}

abstract class P2pReq[T] extends P2pMessage[T] with _root_.java.io.Serializable

abstract class P2pReq[T] extends P2pMessage[T] with _root_.java.io.Serializable

并给出以下简单的java类:

public static class ExecuteAppCommandReq extends P2pReq {

public String value;

public ExecuteAppCommandReq(String value) {

this.value = value;

}

}

public static class ExecuteAppCommandResp extends P2pResp {

public String value;

public ExecuteAppCommandResp(String value) {

this.value = value;

}

}

以下是尝试从java覆盖P2pRpc.request()方法:

public ExecuteAppCommandResp executeAppCommand(ExecuteAppCommandReq req) {

return (ExecuteAppCommandResp) getRpc().request(req);

}

但这不起作用:

Error:(19, 44) java: method request in interface com.pointr.tcp.rpc.P2pRpc cannot be applied to given types;

required: com.pointr.tcp.rpc.P2pReq,scala.reflect.api.TypeTags.TypeTag,scala.reflect.api.TypeTags.TypeTag

found: com.pointr.tcp.java.sparcle.AppContainerService.ExecuteAppCommandReq

reason: cannot infer type-variable(s) U,V

(actual and formal argument lists differ in length)

注意: TypeTag被折叠成request()方法的参数2和argument3。

reason: cannot infer type-variable(s) U,V

(actual and formal argument lists differ in length)

这是该问题的另一个“观点”:

6cae8f87b9072b6b3b2b460d1d7e920e.png

我们可以看到java方面期望隐式TypeTag作为该方法的实际形式参数 。 显然scala会自动执行此操作。 。 如何获得java方面的等价物?

我不知道如何在scala上调用java结构。 任何提示赞赏。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值