package learn.scalaimport org.apache.spark.SparkConfimport scala.collection.mutable.Mapimport javax.ws.rs.core.applicationobject ChecksumAccumulator { //Scala比Java更面向对象的一个方面是Scala没有静态成员,替代品是,Scala有单例对象 //singleton object.用 object关键字替换了class关键字 //当单例对象与某个类共享同一个名称时,它被称作是这个类的伴生对象.你必须在同一个源文件里定义类和它的伴生对象.类被称作这个单例对象的伴生类 //类和它的伴生对象可以互相访问其私有成员 //类和单例对象间的一个差别是,单例对象不带参数,而类可以。因为你不能用new关键字实例化一个单例对象,你没机会传递给它参数 //每个单例对象都被作为由一个静态变量指向的虚构类:synthetic class的一个实例来实现 //特别要指出的是,单例对象会在第一次被访问的时候初始化 //不与伴生类共享名称的单例对象被称为孤立对象:standalone object。由于很多种原因你会用到它,包括把相关的功能方法收集在一起 //或定义一个scala应用的入口点 PRivate val cache = Map[String, Int]() def calculate(s: String): Int = if (cache.contains(s)) cache(s) else { val acc = new ChecksumAccumulator acc.sum=1 for (c <- s){//对传入的字符串的每个字符循环一次 println(c) acc.add(c.toByte) } val cs = acc.get() cache += (s -> cs) cs }}class ChecksumAccumulator { //public 是scala的缺省访问级别 private var sum = 0 //b是 val类型的,不能在 add方法中再次赋值 def add(b: Int): Unit = { sum += b } def get(): Int = { sum //如果没有发现任何显示的返回语句,Scala方法将返回方法中最后一个计算得到的值. //return sum }}
新闻热点
疑难解答