导航:首页 > 编程语言 > java调用scala

java调用scala

发布时间:2023-02-10 05:20:08

⑴ Scala和java比较

1、 scala可以编写脚本,编写一个.scala的脚本代码,直接用同scala x.scala进行执行。
但同时scala也可以类似java,通过scalac编译为.class等形式,基于编译执行。
2、 scala可以在交互式的命令中直接编码运行。
3、 支持隐式变量定义,通过var关键词定义一个变量,具体变量类型在赋值后,scala自行进行类型推断。例如var a = List(1,2,3)
4、 常量定义用val 关键词定义
5、 没有静态类型,通过object 定义单例类,main方法就是放在object类型中。

⑵ Scala和Java,到底该使用哪一种大数据编程

scala底层用到的还是java,只是在java上套了一层壳
由于scala最终被编译为.class 所以其实本质上还是java 所以在scala中可以任意的调用java的api
.java –> .class –> jvm
.scala –> .class –> jvm

⑶ Spark 中用 Scala 和 java 开发有什么区别

Scala相对于Java的优势是巨大的。熟悉Scala之后再看Java代码,有种读汇编的感觉…… 如果仅仅是写Spark应用,并非一定要学Scala,可以直接用Spark的Java API或Python API。但因为语言上的差异,用Java开发Spark应用要罗嗦许多。好在带lambda的Java 8出来之后有所改善。 在Spark应用开发上,学Scala主要好处有二: 开发效率更高,代码更精简; 使用Spark过程中出现异常情况,在排查时如果对Spark源码比较熟悉,可以事半功倍

⑷ scala.reflect.classtag<t> java怎么传入

Java 和 Scala 都支持变参方法, 写在最后的位置上,最基本的调用方式也都是一样的,一个个罗列过去。也可以传入数组参数,因为变参本质上就是一个数组,就是把 ... 开始位置到最后一个参数都收纳到数组中去,所以变参之所以要放在最后的位置上,且一个方法中最多只能有一个变参类型。
这里主要是对比 Scala 对变参方法的调用,基本调用法当然是没问题的,但是在传入数组作为变参的参数列表与 Java 相对时就稍有变化了。
另外提一下,如果想传入 List 作为变参列表,而不是整体作为变参的第一个元素就是调用集合的 toArray() 方法转换成一个数组传入。
下面看 Java 中对变参方法的调用,参数列表和数组
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);
}
}
}

从输出结果能够很明白的看出变参 params 实际上就是一个数组

[Ljava.lang.String;@3f91beef : 3
a
b
c
[Ljava.lang.String;@1a6c5a9e : 2
d
e

我们知道 Scala 和 Java 之间可以互相调用,现在写一段 Scala 代码来调用 foo() 方法
object ScalaVarArgs {

def main(args: Array[String]) {
JavaVarArgs.foo("a", "b", "c")

// JavaVarArgs.foo(Array[String]("d", "e"))
}
}

JavaVarArgs.foo("a", "b", "c") 调用没问题
而 JavaVarArgs.foo(Array[String]("d", "e")) 会有编译问题
Type mismatch: expected String, actual Array[String]
Java 在调用变参方法时可以直接传入相应类型的数组,而 Scala 确不允许这么做了,因它试图把 Array[String] 整体作为一个元素传递给 foo() 方法,而 foo() 要求的元素类型是字符串,所以编译不过。
而 Scala 这时该如何使得与 Java 调用变参方法时的行为一致呢,那就是在调用时再附加说明:是要把数组中的元素逐个传递级变参,写法
JavaVarArgs.foo(Array[String]("d", "e") :_*)

这样的调用输出就是

本文原始链接 , 来自隔叶黄莺 Unmi Blog
[Ljava.lang.String;@7a718e31 : 2
d
e

如果从上面的例子说来,我们的运气还不错,因为编译器告诉了你出现了什么问题。最麻烦的问题总是在能编译,但运行时诡异的情况。
因为在我本人实际中遭遇到的情形是变参类型是 Object 的方法,形如
public static void foo(Object...params) {
System.out.println(params + " : " + params.length);
for(Object o: params) {
System.out.println(o);
}
}

上面把参数改为 Object...params, 不会改变 Java 传数组调用它的行为,但却增加了 Scala 调用它时的排错难度。
在 Scala 中使用 foo(Array[String]("d", "e") 调用并没有编译错误,加入上面的调试代码才发现,不管传入多大的数组,总是输出像

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

说方法只接收到了一个元素,类型被识别为形参的类型,不过进一步遍历变参,发现第一个元素是一个字符串数组,所以 Scala 把 Array[String]("d", "e") 整体作为 params 的第一个元素传给了 foo() 方法。写成

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

是为了把数组拆散了传给 foo() 方法。
起初以为是 Scala 调用 Java 的变参方法需要这么做,后来重新用 Scala 实现下变参方法
def foo(params: AnyRef*) {
println(params + " : " + params.length)
for (s <- params) {
println(s)
}
}

用 Scala 代码来调用它,传入数组,如果不想整体作为一个元素时也必须加上 : _*参数说明,同样的:
foo(Array[String]("d", "e") :_*)
在写这篇之前,我所认定的这是 Scala 调用变参方法的一个缺陷, : _* 似乎是一种默认行为,现在认为这恰恰是 Scala 的一个灵活性所在。Scala 提供了两种方式来传递数组给变参,而为何 Java 不让数组整体作为变参的一个元素呢,不过 Scala 放开这一特性,当变参为 Object... params 确实放大了 Bug 的出现机率。

⑸ 求助!scala如何调用java静态方法

Scala没有静态方法或静态字段,可以用object这个语法结构来达到同样的目的,对象定义了某个类的单个实例,包含了你想要的特性。

例如:

object Accounts{

private var lastNumber = 0

def newUniqueNumber()={lastNumber+=1;lastNumber}

}

当你在应用程序中需要一个新的唯一账号时,调用Account.newUniqueNumber()即可。

⑹ Spark 中用 Scala 和 java 开发有什么区别

  1. 语言不同:Scala 是一门函数式语言,Java是面向对象语言,二者在语言特点上差异特别大。但是scala也是运行在java虚拟机上,两者可以方便的互相调用。

  2. Spark作为一个数据统计分析的工具,它是偏向于函数式处理的思想,因此在spark应用开发时,天然与scala亲近,所以用scala写spark十分的简洁明了,用java代码100行写出来的spark程序,可能用scala几行就搞定了。

  3. Java写spark则是java出生的开发人员快速使用spark的最佳选择。另外,Java 8之后,也添加了一些函数式语言得语法,这使得Java写spark简洁不少。

⑺ java的byte[ ]如何转换成scala的Array[Byte]

假设场景是java某个函数返回了一个byte[]
现在需要在scala代码中调用这个函数,并转换为Array[Byte]
可以先用java写一个包装函数,将
返回值
修改为List<byte>,使用
java.util.Arrays.asList
可以达成这个目的
然后在scala中使用转换,例如
import
scala.collection.JavaConversions.asScalaBuffer
val
buffer
=
asScalaBuffer(JavaList)
将结果转换为一个buffer,调用toArray即可转换为Array[Byte]

⑻ java或者scala写socket客户端发送头消息和消息体到服务端并接收返回信息,这个头消息怎么写

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class Client {
public static final String IP_ADDR = "localhost";//服务器地址
public static final int PORT = 12345;//服务器端口号

public static void main(String[] args) {
System.out.println("客户端启动...");
System.out.println("当接收到服务器端字符为 \"OK\" 的时候, 客户端将终止\n");
while (true) {
Socket socket = null;
try {
//创建一个流套接字并将其连接到指定主机上的指定端口号
socket = new Socket(IP_ADDR, PORT);

//读取服务器端数据
DataInputStream input = new DataInputStream(socket.getInputStream());
//向服务器端发送数据
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
System.out.print("请输入: \t");
String str = new BufferedReader(new InputStreamReader(System.in)).readLine();
out.writeUTF(str);

String ret = input.readUTF();
System.out.println("服务器端返回过来的是: " + ret);
// 如接收到 "OK" 则断开连接
if ("OK".equals(ret)) {
System.out.println("客户端将关闭连接");
Thread.sleep(500);
break;
}

out.close();
input.close();
} catch (Exception e) {
System.out.println("客户端异常:" + e.getMessage());
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
socket = null;
System.out.println("客户端 finally 异常:" + e.getMessage());
}
}
}
}
}
}

⑼ java的byte[ ]如何转换成scala的Array[Byte]

假设场景是java某个函数返回了一个byte[]

现在需要在scala代码中调用这个函数,并转换为Array[Byte]

可以先用java写一个包装函数,将返回值修改为List<byte>,使用
java.util.Arrays.asList 可以达成这个目的

然后在scala中使用转换,例如

import scala.collection.JavaConversions.asScalaBuffer
val buffer = asScalaBuffer(JavaList)

将结果转换为一个buffer,调用toArray即可转换为Array[Byte]

阅读全文

与java调用scala相关的资料

热点内容
ug如何启动服务器 浏览:444
csgo防抖动命令 浏览:960
如何弄到手机app页面的源码 浏览:441
androidwindows7破解版 浏览:363
解压视频动画怎么拍 浏览:748
连涨启动源码 浏览:163
小奔运动app网络异常怎么回事 浏览:449
php开启压缩 浏览:305
服务器主机如何设置启动 浏览:284
linux配置网络命令 浏览:776
一张照片怎么制作视频app 浏览:910
pythonweb和php 浏览:978
电脑服务器地址ip地址 浏览:823
对矩阵压缩是为了 浏览:913
setfacl命令 浏览:175
linux子系统中断 浏览:344
linux查看进程ps 浏览:227
知识库系统php 浏览:625
小波变换压缩图像python 浏览:154
阿里巴巴程序员怎么月入百万 浏览:175