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

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

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

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

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

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

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

下面看 Java 中對(duì)變參方法的調(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í)際上就是一個(gè)數(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')) 會(huì)有編譯問題

Type mismatch: expected String, actual Array[String]

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

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

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

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

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

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

因?yàn)樵谖冶救藢?shí)際中遭遇到的情形是變參類型是 Object 的方法,形如

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

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

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

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

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

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

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

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

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

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

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

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

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

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久精品影视| 97精品国产一区二区三区 | 日韩欧美中文字幕在线视频| 欧美日韩视频免费观看| 免费在线欧美黄色| 国产视频一区二| 日韩 欧美一区二区三区| 欧美成人综合| av高清一区| 欧美激情精品| 欧美在线91| 日韩国产在线观看| 91成人在线| 亚洲最新av| 久久福利影视| 蜜臀精品久久久久久蜜臀| 红桃视频国产一区| 成人日韩在线观看| 日本久久成人网| www成人在线视频| 日韩精品不卡一区二区| 麻豆精品新av中文字幕| 久久不卡国产精品一区二区| 国产极品久久久久久久久波多结野| 亚洲有吗中文字幕| 欧美专区18| 亚洲欧美日韩综合国产aⅴ| 亚洲欧美久久久| 美女91精品| 一二三区精品| 日韩激情精品| 国产日韩欧美一区在线| 国产精品草草| 日韩不卡一区| 桃色一区二区| 不卡福利视频| 亚洲午夜精品久久久久久app| 欧美69视频| 亚洲欧美日韩视频二区| av免费不卡国产观看| 丝袜美腿诱惑一区二区三区| 91精品蜜臀一区二区三区在线| 亚洲电影在线一区二区三区| 亚洲一区日本| 日本午夜精品| 美女精品久久| 亚洲国内精品| 久久人人88| 免费日韩av片| 亚洲免费成人av在线| 日韩精品成人| 麻豆国产欧美日韩综合精品二区| 91日韩在线| 极品日韩av| 午夜欧美视频| 亚洲一二av| 国产麻豆一区二区三区精品视频| 日韩一区二区三区精品 | 欧美日韩在线播放视频| 亚洲18在线| 久久香蕉网站| 免费日韩av片| 国产激情精品一区二区三区| 亚洲激情av| 国产欧美日韩精品高清二区综合区 | 国产一区二区三区精品在线观看| 五月激情久久| 蜜臀av一区二区在线免费观看| 欧美日韩一区二区高清| 久久久久国产精品一区三寸| 中文无码日韩欧| 日韩av在线中文字幕| 性欧美精品高清| 成人片免费看| 日韩精品视频在线看| 天堂中文av在线资源库| 爽好久久久欧美精品| 久久狠狠亚洲综合| 欧美日韩免费观看一区=区三区| 青青国产精品| 欧美日韩国产精品一区二区亚洲| 日韩av一区二区三区四区| 桃色一区二区| 91精品国产自产观看在线| 日韩欧美精品一区| 欧美日本一区| av亚洲免费| 国产v日韩v欧美v| 亚洲精品黄色| 欧美日韩四区| 国产伦精品一区二区三区视频| 精品免费av在线| 日韩精品91亚洲二区在线观看| 日韩电影免费网站| 国产精品啊啊啊| 国产亚洲一区在线| 久久久久国产精品一区二区| 国产图片一区| 亚洲精品一区二区在线播放∴| 日韩精品永久网址| 成人欧美一区二区三区的电影| 国产欧美日韩一区二区三区四区| 免费国产自久久久久三四区久久| 精品一区av| 日本一区二区三区中文字幕| 欧美日韩亚洲在线观看| 欧美黑人巨大videos精品| 午夜久久久久| 99精品视频在线| 美女久久久久久| 日韩黄色av| 在线亚洲精品| 激情视频一区二区三区| 久久精品系列| 亚洲国产成人精品女人| 国产麻豆精品| 婷婷激情综合| 欧美国产三级| 日韩区一区二| 蜜臀av一区二区在线免费观看| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 久久精品青草| 欧美经典一区| 日韩国产91| 日韩精品一二三区| 午夜国产精品视频| 色偷偷色偷偷色偷偷在线视频| 国产三级精品三级在线观看国产| 日韩欧美四区| 一区二区不卡| 天堂俺去俺来也www久久婷婷| 麻豆久久精品| 99xxxx成人网| 一本一道久久a久久| 9色精品在线| 蜜桃视频一区二区三区| 亚洲高清影视| 一区在线观看| 国内亚洲精品| 欧美+日本+国产+在线a∨观看| 不卡视频在线| 亚洲婷婷在线| 麻豆精品91| 久久亚洲色图| 日韩1区2区日韩1区2区| 日本午夜精品久久久久| 国产精品日韩精品中文字幕| 日本午夜免费一区二区| 91综合久久爱com| 日韩国产欧美在线播放| 欧美在线精品一区| 国产图片一区| 91亚洲精品在看在线观看高清| 日韩欧美四区| 欧美激情aⅴ一区二区三区 | 精品视频国产| 国产美女精品视频免费播放软件| 91大神在线观看线路一区| 欧美日本二区| 国产精品一线天粉嫩av| 牛牛精品成人免费视频| 老司机精品视频网| 成人精品高清在线视频| 精品美女久久| 国产资源在线观看入口av| 日韩成人精品一区二区| 高潮一区二区| 不卡视频在线| 亚洲综合国产| 首页国产欧美日韩丝袜| 综合国产精品| 国产日韩视频| 日本蜜桃在线观看视频| 国产综合色产| 国产成人精品亚洲线观看| 国产在线一区不卡| 久久久夜夜夜| 亚洲少妇一区| 综合日韩在线| 久久精品国产在热久久| 精品国产不卡| 日韩精品首页| 日韩精品一级中文字幕精品视频免费观看 | 亚洲欧美不卡| 欧美日韩一区二区三区四区在线观看 | 国产高清精品二区| 欧美亚洲国产精品久久| 免费中文字幕日韩欧美| 国产日产精品_国产精品毛片| 亚洲精品国产日韩| 精品视频在线一区二区在线| 久久毛片亚洲| 久久高清国产| 国产精品天天看天天狠| 激情综合五月| 国产午夜久久| 国产精品三级| 国产亚洲在线观看| 综合激情一区| 欧美肉体xxxx裸体137大胆|