类型转换

java版实现

  1. Object a = 10;
  2. boolean b = a instanceof Integer;
  3. Integer c = (Integer) a;

scala版实现

  1. val a = 10
  2. val b = a.isInstanceOf[Int]
  3. val c = a.asInstanceOf[Int]

获取类的类型

java版实现

User u = JSON.parseObject("{\"name\":\"bob\",\"age\":20}", User.class);

scala版实现

val u = JSON.parseObject("{\"name\":\"bob\",\"age\":20}", classOf[User])

依赖fastjson实现对象反序列化

集合取数

在java中通过[]获取元素

String[] arrs = new String[]{"1", "2"};
System.out.println(arrs[0]);

List<String> lists = new ArrayList<>();
lists.add("hello");
lists.add("java");
System.out.println(lists.get(1));

在scala中通过()取数

val arrs = Array("1", "2")
println(arrs(0))

val lists = List("Hello", "Scala")
println(lists(1))

val map = Map("a" -> 1, "b" -> 2)
println(map("a"))

需要注意的是: 通过map(key)取数,若key不存在,则会抛出异常,这个在java中并不会抛出异常,只是返回null

java集合和scala集合互转

先看这样一段代码示例:

val list = new util.ArrayList[String]()
list.add("hello")
list.add("scala")

list.forEach(new Consumer[String] {
  override def accept(t: String): Unit = {
    println(t)
  }
})
import scala.collection.JavaConverters._
list.asScala.foreach(println)

从示例来看,scala语法比及java简单太多了,要实现这种方案也很简单,只要引入

scala.collection.JavaConverters._

即可实现java集合和scala集合互转。

附一段来自官方的代码注释

The following conversions are supported via `asJava`, `asScala`
 *
 *  - `scala.collection.Iterable` <=> `java.lang.Iterable`
 *  - `scala.collection.Iterator` <=> `java.util.Iterator`
 *  - `scala.collection.mutable.Buffer` <=> `java.util.List`
 *  - `scala.collection.mutable.Set` <=> `java.util.Set`
 *  - `scala.collection.mutable.Map` <=> `java.util.Map`
 *  - `scala.collection.mutable.concurrent.Map` <=> `java.util.concurrent.ConcurrentMap`

也就是说: 引入这个包后,就可以通过调用asJava方法,把scala集合对象转换成对应的java集合对象,调用asScala方法,把java集合对象转换成对应的scala集合对象。

异常捕获

java版实现:

String a = "10b";
try{
    int b = Integer.parseInt(a);
    System.out.println(b);
}
catch (Exception e){
    System.out.println("trans int failed");
}

scala版实现

val a = "10b"
try{
  val b = Integer.parseInt(a)
  println(b)
}
catch {
  case e: Exception => println("trans int failed")
}

switch语句

java版实现

String status = "starting";
int state = 0;
switch (status){
    case "ready":
        state = 0;
        break;
    case "starting":
        state = 1;
        break;
    case "running":
        state = 2;
        break;
    case "complete":
        state = 3;
        break;
    default:
}
System.out.println(state);

scala版实现

val status = "starting"
var state = 0
status match {
  case "ready" => state = 0
  case "starting" => state = 1
  case "running" => state = 2
  case "complete" => state = 3
  case _ => state = 0
}
println(state)