从java入门scala

先丢两个网址,https://docs.scala-lang.org/tour/tour-of-scala.html https://twitter.github.io/effectivescala/index.html,前者是官网的入门文档,后者是推特给出的一些建议,英文水平好的同学可直接跳过去看。

scala类型图

scala 类型

与java类型对应关系

     any->super class of primitive and object
     AnyVal->primitive
     Unit-> void
     AnyRef-> Object

变量

java

     int i = 0 ;
     final String s = “hello, world”;

scala

     var i:Int = 0
     final val s:String = “hello, world”

scala 用var修饰变可变量,用val修饰不可变量,基类型为变量名后:变量类型,不添加可自动推断,但加上阅读会更为清晰.
行末的;号可省略.

方法

java

     public T get(T t ){
         return t;
     }

scala

     def get[T](t: T): T = t

一行是花括号可省略,最后返回时return可省略

java:

class A{
     int a = 0 ;
     String b = “hello, world”;
}

scala:

object Test {
     val s = “hello, world”
}

class Test {
     val i = 0
}

scala中没有static关键字,java的class在scala中分解成了class与object,
所有静态方法和静态变量放在object中.

继承

  1. 接口实现和实现类继承统一使用 extends,即 implements改为extends
  2. 接口的interface关键字改为trait
  3. 重写方法是override为必需
  4. java.lang需要手动引入

不可用功能

  1. 三元静态式不支持 即 finalPoint = yourPoint == myPoint?myPoint:yourPoint,可写成
    finalPoint = if(yourPoint == myPoint)myPoint else yourPoint
  2. continue关键字不可用
  3. switch 用法改变,不用再break了.

       a match{
         case 1=>
           println(“1”)
         case 2=>
           println(“2”)
         case _=>
           println(“)
       }


了解以上后就可以像写java代码一样写scala代码了.

lambda 表达式

mapflatMap
  1. map 一对一映射
    Array("1","2","3").map(x=>x.toInt),这里将"1","2","3"字符串映射成数字1,2,3
  2. flatmap 一对0到多的映射,Array("1", "23","45", "6","8890").flatMap(x =>{if (x.length > 1) x.split("").map(_.toInt).toList else if (x.length == 0) None else Some(x.toInt)})
reduce

Array(1,2,3,4,5).reduce((x,y)=>x+y)
Range(1,6).reduce((x,y)=>x+y)
(1 until 6).reduce((x,y)=>x+y)

implicit 隐式转换

"4321".toInt 就用到了隐式转换
给String提供append方法
implicit def toStringBuffer(s:String):java.lang.StringBuffer={
new java.lang.StringBuffer(s)
}

name parameter

redis.clients.jedis.JedisPool为例,共有约30个构造函数,最终大多都调到最长参数那个方法,其他都是提供了默认值,目的是为用户提供简单的调用方式

java

public Test(){this(DEFAULT_PARAM1,DEFAULT_PARAM2);}
public Test(Object param1){this(param1,DEFAULT_PARAM2);}
public Test(Object param1,Object param2){this.param1=param1; this.param2=param2;}

scala

def this(param1:AnyRef = DEFAULT_PARAM1,param2:AnyRef=DEFAULT_PARAM2)
调用 
new Test, new Test(param1="10086"), new Test(param2="100010"), new Test("10086","10010")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值