我有一段来自java的代码,我试图在scala中实现。
java代码,工作正常。
protected byte[] serialize(final TBase<?, ?> base) {
try {
return new TSerializer(new TCompactProtocol.Factory()).serialize(base);
} catch (final TException e) {
throw new RuntimeException(e);
}
}
scala代码我正在实施。
def serialize(base: TBase[_,_]): Array[Byte]={
try{
return new TSerializer(new TCompactProtocol.Factory()).serialize(base)
}catch {
case ex: TException => {
throw new RuntimeException(ex.getMessage())
}
}
}
编译器没有给我"type mismatch; found : org.apache.thrift.TBase[_$1,_$2] where type _$2, type _$1 required:
org.apache.thrift.TBase[_ <: org.apache.thrift.TBase[_, _], _ <: org.apache.thrift.TFieldIdEnum]"
我环顾四周,其中一个建议是使用,有些也没有。但不确定这是正确的做法。有人可以帮我这个。
答案 0 :(得分:0)
如果没有进一步的信息,这个答案只是基于错误的猜测:
type mismatch;
found : TBase[_$1,_$2] where type _$2, type _$1
required: TBase[_ <: TBase[_, _], _ <: TFieldIdEnum]
将类型参数约束为建议的错误消息可能会解决问题:
def serialize(base: TBase[_ <: TBase[_,_] ,_ <: TFieldIdEnum])
如果没有看到序列化方法和TBase类的签名,很难说明为什么会出现这种情况。我只能推测 java通配符带来了已在其他地方定义的约束,而 scala existencials 则没有,要求你明确说明。
另外,请勿使用return
关键字。它没有按照你的想法做到。