溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

scala 調(diào)用 java 方法參數(shù)匹配問題

發(fā)布時(shí)間:2020-08-07 16:04:07 來源:ITPUB博客 閱讀:170 作者:破棉襖 欄目:編程語言

scala調(diào)用java的FastJson時(shí)發(fā)生了一個(gè)方法參數(shù)匹配問題:

scala和java幾乎沒有區(qū)別,可以互相調(diào)用。注意這里說的是幾乎,總有那么少數(shù),出人意料的驚喜在告訴你,scala就是scala。

例子:


  1. import com.alibaba.fastjson.JSON


  2. var map:scala.collection.mutable.HashMap[String,Any] = scala.collection.mutable.HashMap()
  3. map += ("name" -> "wzx")
  4. map += ("age" -> 18)
  5. val javaMap = JavaConversions.asJavaMap(map)
  6. val jsonStr = JSON.toJSONString(javaMap)
上面代碼是將map轉(zhuǎn)為json字符串,但是編輯器會(huì)編譯不過,異常如下:

  1. ambiguous reference to overloaded definition, both method toJSONString in object JSON of type (x$1: Any, x$2: com.alibaba.fastjson.serializer.SerializerFeature*)String and method toJSONString in object JSON of type (x$1: Any)String match argument types (java.util.Map[String,Any])
FastJson代碼:

  1.     public static String toJSONString(Object object) {
  2.         return toJSONString(object, emptyFilters, new SerializerFeature[0]);
  3.     }

  4.     public static String toJSONString(Object object, SerializerFeature... features) {
  5.         return toJSONString(object, DEFAULT_GENERATE_FEATURE, features);
  6.     }
錯(cuò)誤的原因很明顯,編譯器在編譯scala調(diào)用java依賴包里面的toJSONString函數(shù)時(shí)發(fā)生了歧義。


java重載調(diào)用規(guī)則:
  • 調(diào)用方法時(shí),能與固定參數(shù)函數(shù)以及可變參數(shù)都匹配時(shí),優(yōu)先調(diào)用固定參數(shù)方法。
  • 調(diào)用方法時(shí),兩個(gè)變長(zhǎng)參數(shù)都匹配時(shí),編譯無法通過。
scala重載調(diào)用規(guī)則:
  • 調(diào)用方法時(shí),scala首先會(huì)自己匹配,自己匹配不了的時(shí)候,使用者可以手動(dòng)來標(biāo)識(shí)變參參數(shù)

總結(jié):
     scala調(diào)用java異常,可能是scala編譯器和java編譯器處理此問題的差異導(dǎo)致。




向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI