欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

scala代碼轉(zhuǎn)java Scala代碼

java的byte[ ]如何轉(zhuǎn)換成scala的Array[Byte]?

假設(shè)場(chǎng)景是java某個(gè)函數(shù)返回了一個(gè)byte[]

十多年專注成都網(wǎng)站制作,成都定制網(wǎng)頁(yè)設(shè)計(jì),個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于成都定制網(wǎng)頁(yè)設(shè)計(jì),高端網(wǎng)頁(yè)制作,對(duì)成都玻璃貼膜等多個(gè)方面,擁有多年的網(wǎng)站營(yíng)銷經(jīng)驗(yàn)。

現(xiàn)在需要在scala代碼中調(diào)用這個(gè)函數(shù),并轉(zhuǎn)換為Array[Byte]

可以先用java寫(xiě)一個(gè)包裝函數(shù),將

返回值

修改為L(zhǎng)istbyte,使用

java.util.Arrays.asList

可以達(dá)成這個(gè)目的

然后在scala中使用轉(zhuǎn)換,例如

import

scala.collection.JavaConversions.asScalaBuffer

val

buffer

=

asScalaBuffer(JavaList)

將結(jié)果轉(zhuǎn)換為一個(gè)buffer,調(diào)用toArray即可轉(zhuǎn)換為Array[Byte]

如何在idea中實(shí)時(shí)的將scala文件轉(zhuǎn)變成java文件

導(dǎo)入也是沒(méi)有問(wèn)題的,intellij是做了這方面的功能。其實(shí)不導(dǎo)入也是沒(méi)有問(wèn)題的,intellij上建一個(gè)工程,把eclipse的工具復(fù)制曩昔,也是一樣的。你之所以問(wèn)這個(gè)問(wèn)題是不清囂張j2ee的一些基本常識(shí)。eclipse的工程名目和inteliij最終編程的是j2ee的

scala.reflect.classtag java怎么傳入

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

這里主要是對(duì)比 Scala 對(duì)變參方法的調(diào)用,基本調(diào)用法當(dāng)然是沒(méi)問(wèn)題的,但是在傳入數(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 : 3

a

b

c

[Ljava.lang.String;@1a6c5a9e : 2

d

e

我們知道 Scala 和 Java 之間可以互相調(diào)用,現(xiàn)在寫(xiě)一段 Scala 代碼來(lái)調(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)用沒(méi)問(wèn)題

而 JavaVarArgs.foo(Array[String]("d", "e")) 會(huì)有編譯問(wèn)題

Type mismatch: expected String, actual Array[String]

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

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

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

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

本文原始鏈接 , 來(lái)自隔葉黃鶯 Unmi Blog

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

d

e

如果從上面的例子說(shuō)來(lái),我們的運(yùn)氣還不錯(cuò),因?yàn)榫幾g器告訴了你出現(xiàn)了什么問(wèn)題。最麻煩的問(wè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)用并沒(méi)有編譯錯(cuò)誤,加入上面的調(diào)試代碼才發(fā)現(xiàn),不管傳入多大的數(shù)組,總是輸出像

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

[Ljava.lang.String;@ea25c1

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

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

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

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

def foo(params: AnyRef*) {

println(params + " : " + params.length)

for (s - params) {

println(s)

}

}

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

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

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

如何將scala中的Seq,ArrayBuffer等轉(zhuǎn)換為java的List

scala中的collect分為mutable和immutable兩種,分別在scala.collection.mutable 和scala.collection.immutable package下。但是有時(shí)候我們需要將scala中的collection,比如Seq, ArrayBuffer等轉(zhuǎn)換為java中的List, 以便存到數(shù)據(jù)庫(kù)中,以數(shù)組或List的形式存在。

比如,我們通過(guò)spark任務(wù)得到了一個(gè)Seq[Long]類型的變量,并希望將其保存到MongoDB中。我們通常會(huì)這樣處理:

(1)生成一個(gè)BasicDBObject對(duì)象,val obj = new BasicDBObject();

(2)obj.put(key, value), value為我們需要保存的Seq[Long], 但是需要注意的是value必須是java的類型,由于java不支持Seq[Long]類型,所以需要將其轉(zhuǎn)換為L(zhǎng)ist[Long]類型。

如何轉(zhuǎn)換呢?

scala提供了一個(gè)implicit conversion機(jī)制,只需要引入scala.collection.JavaConversions._, 然后顯示轉(zhuǎn)換即可。具體參見(jiàn)

例如,上面的代碼可以寫(xiě)成:

import scala.collection.JavaConversions._

val jul: java.util.List[Long] = visitors // 其中visitors類型為Seq[Long]類型

obj.put("visitors", jul)

值得注意的是,scala和java類型之間的轉(zhuǎn)換,并不會(huì)發(fā)生拷貝。例如先將java容器轉(zhuǎn)換為scala容器,然后將該scala容器再轉(zhuǎn)換成java容器,實(shí)際上兩個(gè)對(duì)象都指向同一片內(nèi)存區(qū)域。

新聞標(biāo)題:scala代碼轉(zhuǎn)java Scala代碼
URL鏈接:http://chinadenli.net/article24/dodcice.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站關(guān)鍵詞優(yōu)化、網(wǎng)站收錄服務(wù)器托管、App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司