使用通配符在scala中键入不匹配

时间:2013-08-30 19:14:11

标签: java scala thrift

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

的错误

我环顾四周,其中一个建议是使用,有些也没有。但不确定这是正确的做法。有人可以帮我这个。

1 个答案:

答案 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关键字。它没有按照你的想法做到。