Scala与Java交互

原创
2016/06/26 13:45
阅读数 205

###代码示例 假如我们想要根据某个特定国家(比如法国)的习惯来获取并格式化当前日期, 我们可以使用以下 Scala 和 Java 混搭的代码来实现。

import java.text.DateFormat._
import java.util.{Date, Locale}

/**
  * Created by jackiehff on 16/6/26.
  */
object FrenchDate {

  def main(args: Array[String]) {
    val now = new Date
    val df = getDateInstance(LONG, Locale.FRANCE)
    println(df format now)
  }
}

在 main 方法内我们首先创建了 Java Date 类的一个实例, 其默认值就是当前日期。接着我们使用静态的 getDateInstance 方法定义了一个日期格式化器 DateFormat。最后我们根据本地化的 DateFormat 实例打印输出当前日期。

###代码剖析 ####1、import java.lang 包下的所有类默认都会被引入进来, 其它的类则需要显示的引入。

Java 类库中定义了很多功能强大的工具类, 例如 Date 和 DateFormat。由于 Scala 可以无缝地和 Java 互操作, 因此没有必要在 Scala 类库中实现等价的类, 我们可以简单地引入对应的 Java 包中的类:

import java.text.DateFormat._
import java.util.{Date, Locale}

Scala 的 import 语句非常类似于 Java 的 import 语句, 并且它更加强大. 同一个包中的多个类可以使用一对花括号引入进来, 参见代码中的第二个 import 语句。另一个不同点是当你想要引入一个包或类中的所有名称时需要使用下划线而不是星号, 参见代码中第一个 import 语句, 这是 **因为星号在 Scala 中是一个有效的标识符 (比如方法名) **

第一个 import 语句引入了 DateFormat 类的所有成员(包括成员函数和字段), 这样使得 静态方法 getDateInstance 和 静态字段 LONG 直接变得可见。

####2、val 在 Scala 中, val 和 var 都可以用来定义变量。用 val 定义的变量是不可变的, 初始化之后, 值就会固定不变。而用 var 定义的变量是可变的, 其值进行可以多次修改。

上面所说的_不变性指的是变量本身, 而不是变量所引用的对象实例_。比如:

val now = new Date

则不能把 now 指向其它引用, 但是可以使用 setTime 方法改变 Date 实例。

Best Practice: 在 Scala 中, 尽量优先使用 val, 而不是 var

####3、中缀语法 只有一个参数的方法可以使用中缀语法。即 表达式

df format now

相比于表达式

df.format(now)

更加简洁。

虽然这只是一个很小的语法细节,但它具有很重要的影响。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
4 收藏
0
分享
返回顶部
顶部