给定以下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)
这是该问题的另一个“观点”:
我们可以看到java方面期望隐式TypeTag作为该方法的实际形式参数 。 显然scala会自动执行此操作。 。 如何获得java方面的等价物?
我不知道如何在scala上调用java结构。 任何提示赞赏。