0

我有一段来自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]"

我环顾四周,其中一个建议是使用和 some and none 类型。但不确定这是正确的做法。有人可以帮我弄这个吗。

4

1 回答 1

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 existscials没有,要求您明确说明。

另外,不要使用return关键字。它不会做你认为它会做的事情。

于 2013-08-30T23:00:30.590 回答