可变长参数

  1. object TestLog {
  2. def main(args: Array[String]): Unit = {
  3. test2("a")
  4. test3("a")
  5. }
  6. def test2(args:Any*) = {
  7. test(args)
  8. }
  9. def test3(args:Any*) = {
  10. test(args: _*)
  11. }
  12. def test(args:Any*) = {
  13. println(args.length)
  14. var i = 0
  15. while(i < args.length){
  16. print(s"the $i arg:")
  17. println(String.valueOf(args(i)))
  18. i += 1
  19. }
  20. }
  21. }

输出:

1
the 0 arg:WrappedArray(a)
1
the 0 arg:a

try-catch语法

def getIntConfig(config: util.Map[String,Object], key: String, defaultValue: Int): Int = {
    try{
      Integer.parseInt(String.valueOf(config.get(key)))
    }
    catch{
      case e: Exception => {
        defaultValue
      }
    }
}

scala没有自动装箱

def map = new util.HashMap[String,Object]()
map.put("a", 10) //编译失败

正解:

val map = new util.HashMap[String,Any]()
map.put("a", 10)

asInstanceOf使用

执行异常:

val map = new util.HashMap[String,Any]()
map.put("a", 10)
println(map.getOrDefault("a", "20").asInstanceOf[String])

泛型解析

def parseJson[T](node: FlowNode, cls: Class[T]): T = {
  JSON.parseObject(JSON.toJSONString(node.getConfig, SerializerFeature.SortField), cls)
}