Scala入门之高级类型:this.type
来源:互联网 发布:叶紫涵网络直播 编辑:程序博客网 时间:2024/06/06 00:14
this.type
在写Spark程序的代码中一开始就能看到这代码: val conf = new SparkConf conf.setAppName("OnlineBlackListFilter").setMaster("local")上面 setAppName、setMaster返回的就是SparkConf,所以才能继续使用SparkConf的方法点出方法来。而要做到这一点的关键就是使方法的返回值是对象本身。在SparkConf源码中是这样做的:def setAppName(name: String): SparkConf = {set("spark.app.name", name) }其中set方法def set(key: String, value: String): **SparkConf** = {if (key == null) { throw new NullPointerException("null key")}if (value == null) { throw new NullPointerException("null value for " + key)}logDeprecationWarning(key)settings.put(key, value)**this** } 从中可以看出它返回的是SparkConf。而这情况其实也可以另外的方式写出来,这就是this.type通过例子来讲,如下
/** 定义食物这个类,里面有食物的名字还有年龄 */class Food{ var name: String = _ var age: Int = _ def setName(getName: String) = { this.name = getName *this* } def setAge(getAge: Int)= { this.age = getAge *this* }}object ThisType extends App{ // val food = new Food food.setName("rice").setAge(2)}
上面代码在方法的最后一行都是用的this,意味着返回自身对象。不过这方式如果有继承结构的话,子类这方式调用会有问题。完整代码如下:
package com.dt.scala.moguyun/** * Created by hlf on 2016/8/9 for learn this.type. */object ThisType extends App{ //食物点出来 val food = new Food food.setName("rice").setAge(2) println("Food : " + food) //大米点出来 val rice = new Rice //这是没问题的因为返回的是Food rice.setName("guangxidami").setAge(3) //这样也没问题,setgrow()返回大米这个对象,可以调用父类的setName,setAge方法 rice.setgrow().setName("beijingdami").setAge(1) //这样在没修改返回类型为this.type之前是有问题的,因为setName,setAge返回的是食物这个类, //食物没有setgrow()这个方法 rice.setName("zhejiangdami").setAge(4).setgrow() println("Rice : " + rice)}/** 定义食物这个类,里面有食物的名字还有年龄 */class Food{ private var name: String = _ private var age: Int = _ def setName(getName: String): this.type = { this.name = getName this } def setAge(getAge: Int): this.type = { this.age = getAge this } /* def setName(getName: String) = { this.name = getName this } def setAge(getAge: Int)= { this.age = getAge this } */ override def toString: String = "name = " + name + "||=|| age = " + age}/** * 定义一个大米类继承食物,里面方法返回的this是大米这个对象 */class Rice extends Food{ def setgrow() ={ println(" I am growing!! Don't eat me :(") this }}
从此可以看出在方法返回类型上使用this.type就可以写出像链条一样的代码,不断地点出来:)
0 0
- Scala入门之高级类型:this.type
- Scala入门之高级类型:类型投影
- Scala入门之高级类型:结构类型
- scala类型系统:3) 单例类型与this.type
- scala中的this.type
- Scala之类型参数化:Type Parameterization
- Scala之类型参数化:Type Parameterization
- Scala入门之类型参数
- Scala 抽象类型Type
- 探讨Scala中的this.type
- scala学习笔记1-泛型、界定、形变、this.type、复合类型、抽象类型
- scala高级类型
- scala 高级类型
- scala 高级类型
- scala高级类型
- Scala类型 8:type 关键字
- scala中的this.type-这个问题好难懂
- Scala课堂-6-高级类型
- javascript_lesson3_引用类型
- 判断1-100以内的素数
- 解决ubuntu14 无法CIFS挂载window共享文件
- android 内存与缓存的理解
- tomcat7集群(session复制)
- Scala入门之高级类型:this.type
- 初识spring(十二)
- Some useful DevOPS commands
- php中的pdo操作mysql事务处理实例
- 图的广度优先搜索遍历(邻接表&邻接矩阵)(C++)
- 如何在Windows平台使用VS搭建C++/Lua的开发环境
- Sqlite的加锁机制
- 数据结构实验之串一:KMP简单应用
- Dymola-多学科系统仿真工具