簡體   English   中英

Scala中使用通配符的類型不匹配

[英]Type mismatch in scala with wildcards

我有一段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]"的錯誤"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]"

我到處看了很多,建議之一是使用,有些則沒有。 但不確定這樣做是否正確。 有人可以幫我弄這個嗎。

沒有更多信息,此答案只是基於錯誤的猜測:

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關鍵字。 它沒有按照您的想法做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM