与 Java 互动
Scala 的优点之一是它非常容易跟 Java 代码沟通。Scala 会默认 importjava.lang
底下之类,其他类则需要明确导入。
让我们看个展示这点的示例。取得当下日期并根据某个特定国家调整成该国格式,如法国。
Java 的标准函数库定义了一些有用的工具类,如Date
跟DateFormat
。因为 Scala 可以无缝的跟 Java 互动,这边不需要以 Scala 实作同样类-我们只需要导入对应的 Java 包:
import java.util.{Date, Locale}
import java.text.DateFormat
import java.text.DateFormat._
object FrenchDate {
def main(args: Array[String]) {
val now = new Date
val df = getDateInstance(LONG, Locale.FRANCE)
println(df format now)
}
}
Scala 的导入表达式跟 Java 非常像,但更为强大。如第一行,同一个 package 下的多个类可以用大括号括起来一起导入。另外一个差别是,当要导入套件或类下所有名称时,用下标 (_
) 而不是星号 (*
)。这是因为星号在 Scala 是一个合法的标识符 (如函数名称)。
所以第三行的表达式导入所有DateFormat
类的成员。这让静态方法getDateInstance
跟静态属性LONG
可直接被使用。
在main
函数中我们先创造一个 Java 的Date
类实例,该实例默认拥有现在的日期。接下来用getDateInstance
函数定义日期格式。最后根据地区化的DateFormat
实例对现在日期设定格式并印出。最后一行展现了一个 Scala 有趣特点。只需要一个对象的函数可以用中缀语法调用。就是说,这个表达式
df format now
是这个表达式的简略版本
df.format(now)
它看起来也许只是语法上的小细节,但却有着重要的影响,其中一个影响将会在下一节做介绍。
最后值得一提的是,Scala 可以直接继承 Java 类或者实现 Java 接口。