网络宝典
第二套高阶模板 · 更大气的阅读体验

Scala如何调用Java:几行代码就能搞定

发布时间:2026-04-22 16:31:40 阅读:1 次

很多刚学Scala的朋友一看到Java类库就犯怵,以为得重写一套——其实完全没必要。Scala和Java跑在同一个JVM上,天然互通,调用Java代码就像调自己写的函数一样自然。

直接new一个Java对象

比如你想用Java的ArrayList,不用改任何配置,直接写:

import java.util.ArrayList

val list = new ArrayList[String]()
list.add("苹果")
list.add("香蕉")
println(list.get(0)) // 输出:苹果

注意:Scala里没有分号,import写在文件顶部就行,new关键字不能省。

调用Java静态方法也很简单

比如想用java.lang.Math里的max方法:

import java.lang.Math

val bigger = Math.max(15, 8)
println(bigger) // 输出:15

Java的静态工具类,在Scala里照搬照用,连包名都不用缩写。

处理Java的getter/setter

Java Bean习惯用getXXX()setXXX(),Scala会自动帮你“翻译”成点号访问。比如有个Java类:

public class Person {
    private String name;
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}

在Scala里可以这样用:

val p = new Person()
p.name = "小王"  // 自动转成 setName("小王")
println(p.name) // 自动转成 getName()

这个特性叫“Bean属性映射”,默认开启,不用额外配置。

注意几个小坑

• Java的void方法在Scala里返回Unit(类似空括号()),别拿它当值用;
• Java数组要写成Array[String]这种形式,但底层还是String[]
• 如果Java方法参数是泛型通配符(比如List<? extends Number>),Scala里用List[_ <: Number]来对应。

举个实战例子:用Java的SimpleDateFormat格式化时间,这在Scala标准库里没直接替代品:

import java.text.SimpleDateFormat
import java.util.Date

val sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm")
val now = new Date()
println(sdf.format(now)) // 输出类似:2024-06-12 14:30

你看,没加插件、不改构建脚本、不装额外依赖,编译就能过,运行就生效。