日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Java 和 Scala 如何調(diào)用變參

瀏覽:21日期:2022-08-25 16:56:40

Java 和 Scala 都支持變參方法, 寫在最后的位置上,最基本的調(diào)用方式也都是一樣的,一個個羅列過去。也可以傳入數(shù)組參數(shù),因為變參本質(zhì)上就是一個數(shù)組,就是把 ... 開始位置到最后一個參數(shù)都收納到數(shù)組中去,所以變參之所以要放在最后的位置上,且一個方法中最多只能有一個變參類型。

這里主要是對比 Scala 對變參方法的調(diào)用,基本調(diào)用法當(dāng)然是沒問題的,但是在傳入數(shù)組作為變參的參數(shù)列表與 Java 相對時就稍有變化了。

另外提一下,如果想傳入 List 作為變參列表,而不是整體作為變參的第一個元素就是調(diào)用集合的 toArray() 方法轉(zhuǎn)換成一個數(shù)組傳入。

下面看 Java 中對變參方法的調(diào)用,參數(shù)列表和數(shù)組

public class JavaVarArgs { public static void main(String[] args) { foo('a', 'b', 'c'); foo(new String[]{'d', 'e'}); } public static void foo(String...params) { System.out.println(params + ' : ' + params.length); for(String s: params) { System.out.println(s); } }}

從輸出結(jié)果能夠很明白的看出變參 params 實際上就是一個數(shù)組

[Ljava.lang.String;@3f91beef : 3abc[Ljava.lang.String;@1a6c5a9e : 2de

我們知道 Scala 和 Java 之間可以互相調(diào)用,現(xiàn)在寫一段 Scala 代碼來調(diào)用 foo() 方法

object ScalaVarArgs { def main(args: Array[String]) { JavaVarArgs.foo('a', 'b', 'c') // JavaVarArgs.foo(Array[String]('d', 'e')) }}

JavaVarArgs.foo('a', 'b', 'c') 調(diào)用沒問題

而 JavaVarArgs.foo(Array[String]('d', 'e')) 會有編譯問題

Type mismatch: expected String, actual Array[String]

Java 在調(diào)用變參方法時可以直接傳入相應(yīng)類型的數(shù)組,而 Scala 確不允許這么做了,因它試圖把 Array[String] 整體作為一個元素傳遞給 foo() 方法,而 foo() 要求的元素類型是字符串,所以編譯不過。

而 Scala 這時該如何使得與 Java 調(diào)用變參方法時的行為一致呢,那就是在調(diào)用時再附加說明:是要把數(shù)組中的元素逐個傳遞級變參,寫法

JavaVarArgs.foo(Array[String]('d', 'e') :_*)

這樣的調(diào)用輸出就是

[Ljava.lang.String;@7a718e31 : 2de

如果從上面的例子說來,我們的運氣還不錯,因為編譯器告訴了你出現(xiàn)了什么問題。最麻煩的問題總是在能編譯,但運行時詭異的情況。

因為在我本人實際中遭遇到的情形是變參類型是 Object 的方法,形如

public static void foo(Object...params) { System.out.println(params + ' : ' + params.length); for(Object o: params) { System.out.println(o); } }

上面把參數(shù)改為 Object...params, 不會改變 Java 傳數(shù)組調(diào)用它的行為,但卻增加了 Scala 調(diào)用它時的排錯難度。

在 Scala 中使用 foo(Array[String]('d', 'e') 調(diào)用并沒有編譯錯誤,加入上面的調(diào)試代碼才發(fā)現(xiàn),不管傳入多大的數(shù)組,總是輸出像

[Ljava.lang.Object;@7814d044 : 1[Ljava.lang.String;@ea25c1

說方法只接收到了一個元素,類型被識別為形參的類型,不過進一步遍歷變參,發(fā)現(xiàn)第一個元素是一個字符串?dāng)?shù)組,所以 Scala 把 Array[String]('d', 'e') 整體作為 params 的第一個元素傳給了 foo() 方法。寫成

foo(Array[String]('d', 'e') : _*)

是為了把數(shù)組拆散了傳給 foo() 方法。

起初以為是 Scala 調(diào)用 Java 的變參方法需要這么做,后來重新用 Scala 實現(xiàn)下變參方法

def foo(params: AnyRef*) { println(params + ' : ' + params.length) for (s <- params) { println(s) } }

用 Scala 代碼來調(diào)用它,傳入數(shù)組,如果不想整體作為一個元素時也必須加上 : _* 參數(shù)說明,同樣的:

foo(Array[String]('d', 'e') :_*)

在寫這篇之前,我所認(rèn)定的這是 Scala 調(diào)用變參方法的一個缺陷,: _* 似乎是一種默認(rèn)行為,現(xiàn)在認(rèn)為這恰恰是 Scala 的一個靈活性所在。Scala 提供了兩種方式來傳遞數(shù)組給變參,而為何 Java 不讓數(shù)組整體作為變參的一個元素呢,不過 Scala 放開這一特性,當(dāng)變參為 Object... params 確實放大了 Bug 的出現(xiàn)機率。

以上就是Java 和 Scala 如何調(diào)用變參的詳細(xì)內(nèi)容,更多關(guān)于Java 和 Scala 調(diào)用變參的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品hd| 成人午夜在线| 91成人小视频| 国产精品porn| 久久国产日韩| 日本欧美久久久久免费播放网| 日韩av午夜在线观看| 激情久久久久久| 久久久久免费av| 黑丝一区二区三区| 久久丁香四色| 亚洲欧美久久| 久久国内精品| 你懂的国产精品| av资源中文在线| 首页亚洲欧美制服丝腿| 免费在线播放第一区高清av| 久久不见久久见免费视频7| 国产日韩欧美| 91av亚洲| 亚洲香蕉久久| 日韩激情中文字幕| 日本视频在线一区| 青青草国产成人99久久| 亚洲黄色免费看| 亚洲综合丁香| 成人国产精品久久| 亚洲日产国产精品| 国产一区不卡| 欧美日韩一二| 天堂精品久久久久| 亚洲www啪成人一区二区| 欧美另类专区| 性感美女一区二区在线观看| 福利欧美精品在线| 五月天综合网站| 久久精品国产99久久| 亚洲综合欧美| 天堂日韩电影| 久久精品国产免费| 玖玖精品视频| 日韩高清成人| 成午夜精品一区二区三区软件| 亚洲最新av| 日本视频一区二区| 一区二区三区视频免费观看| 欧美视频久久| 久久在线免费| 成人高清一区| 国产乱码午夜在线视频| 精品久久国产一区| 久久不见久久见免费视频7| 蜜臀av在线播放一区二区三区| 久久精品二区三区| 四虎精品一区二区免费| 91精品韩国| 久久中文字幕一区二区三区| 激情久久久久久| 欧美日本一区| 亚洲在线电影| 欧美国产偷国产精品三区| 亚洲免费专区| 久久精品国产99久久| 国产日韩视频| 秋霞影院一区二区三区| 久久精品av麻豆的观看方式| 国产一区二区三区不卡视频网站| 国产精品外国| 国产精品自在| 欧美精品九九| 91精品尤物| 日产精品一区| 亚洲精品高潮| 日韩专区在线视频| 国产亚洲一区二区三区啪| 日本国产一区| 亚洲网站视频| 首页国产欧美久久| 日韩福利视频导航| 欧美精品导航| 91精品久久久久久久久久不卡| 国产精品欧美在线观看| 另类亚洲自拍| 亚洲综合色婷婷在线观看| 国产精品三级| 国产视频一区在线观看一区免费| 欧美在线看片| 久久精品福利| 亚洲少妇一区| 亚洲涩涩在线| 中文字幕一区二区三区在线视频| 亚洲午夜91| 国产精品综合色区在线观看| 巨乳诱惑日韩免费av| 色8久久久久| 欧美+日本+国产+在线a∨观看| 麻豆精品蜜桃视频网站| 久久裸体视频| 色综合五月天| 不卡一区综合视频| 日韩中文av| 婷婷综合激情| 欧美日韩在线观看视频小说| 久久免费黄色| 欧美三级第一页| 日韩一级网站| 日本综合视频| 亚洲精品乱码日韩| 视频一区视频二区中文字幕| 亚洲精品123区| 伊人影院久久| 黄在线观看免费网站ktv| 国产精品亚洲一区二区在线观看 | 精品国产精品国产偷麻豆| 国产一区二区中文| 欧美日韩精品一区二区三区视频 | 亚洲精品综合| 日本精品不卡| 国产日韩欧美三区| 亚洲18在线| 婷婷精品久久久久久久久久不卡| 日韩一区自拍| 69堂免费精品视频在线播放| 一区在线免费观看| 久久男人天堂| 精品国产一区二区三区噜噜噜| 中文字幕亚洲影视| 精品捆绑调教一区二区三区| 国产亚洲一区二区三区不卡| 性欧美69xoxoxoxo| 欧美激情aⅴ一区二区三区| 久久蜜桃资源一区二区老牛| 日韩一区二区三区高清在线观看| 国产色播av在线| 日韩视频久久| 麻豆成人91精品二区三区| 好看的亚洲午夜视频在线| 国产精品毛片在线看| 国产精品成人自拍| 日韩高清不卡| 国产真实久久| 在线日韩中文| 久久av一区二区三区| 午夜久久一区| 欧美精品黄色| 免费在线观看不卡| 男女男精品视频网| 国产视频网站一区二区三区| 日韩av在线播放网址| 一区在线免费| 精品一级视频| 天堂va欧美ⅴa亚洲va一国产| 天堂√中文最新版在线| 久久久一本精品| 蜜臀av性久久久久蜜臀aⅴ流畅 | 久久亚洲视频| 精品久久亚洲| 日韩毛片一区| 婷婷亚洲五月| 日韩精品2区| 日韩国产一区二| 国产亚洲永久域名| 久久成人高清| 亚洲五月综合| 好吊视频一区二区三区四区| 日本久久黄色| 夜久久久久久| 九九久久国产| 在线观看一区| 久久久影院免费| 国产自产自拍视频在线观看| 日韩在线二区| 麻豆高清免费国产一区| 国产精品嫩草影院在线看| 亚洲一级高清| 日韩电影免费网站| 国产欧美日本| 欧美/亚洲一区| 久久这里只有| 中文字幕日韩亚洲| 久久久久久久久久久9不雅视频| 日韩精品视频一区二区三区| 欧美不卡高清一区二区三区| 国产精品一二| 日韩va亚洲va欧美va久久| jiujiure精品视频播放| 国产不卡av一区二区| 国产精品伊人| 欧美日韩a区| 丝袜美腿亚洲色图| 91av亚洲| 国产精品美女久久久浪潮软件| 99视频一区| 美女少妇全过程你懂的久久| 久久一区欧美| 青青青国产精品| 午夜精品影视国产一区在线麻豆| 日韩高清不卡| 视频在线观看一区二区三区| 国产日产一区|