与 Java 互动

Scala 的优点之一是它非常容易跟 Java 代码沟通。Scala 会默认 importjava.lang 底下之类,其他类则需要明确导入。

让我们看个展示这点的示例。取得当下日期并根据某个特定国家调整成该国格式,如法国。

Java 的标准函数库定义了一些有用的工具类,如DateDateFormat。因为 Scala 可以无缝的跟 Java 互动,这边不需要以 Scala 实作同样类-我们只需要导入对应的 Java 包:

  1. import java.util.{Date, Locale}
  2. import java.text.DateFormat
  3. import java.text.DateFormat._
  4. object FrenchDate {
  5. def main(args: Array[String]) {
  6. val now = new Date
  7. val df = getDateInstance(LONG, Locale.FRANCE)
  8. println(df format now)
  9. }
  10. }

Scala 的导入表达式跟 Java 非常像,但更为强大。如第一行,同一个 package 下的多个类可以用大括号括起来一起导入。另外一个差别是,当要导入套件或类下所有名称时,用下标 (_) 而不是星号 (*)。这是因为星号在 Scala 是一个合法的标识符 (如函数名称)。

所以第三行的表达式导入所有DateFormat 类的成员。这让静态方法getDateInstance 跟静态属性LONG 可直接被使用。

main 函数中我们先创造一个 Java 的Date 类实例,该实例默认拥有现在的日期。接下来用getDateInstance 函数定义日期格式。最后根据地区化的DateFormat 实例对现在日期设定格式并印出。最后一行展现了一个 Scala 有趣特点。只需要一个对象的函数可以用中缀语法调用。就是说,这个表达式

  1. df format now

是这个表达式的简略版本

  1. df.format(now)

它看起来也许只是语法上的小细节,但却有着重要的影响,其中一个影响将会在下一节做介绍。

最后值得一提的是,Scala 可以直接继承 Java 类或者实现 Java 接口。