[英]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.