Scala实战高手****第15课:Scala类型参数编程实战及Spark源码鉴赏
1、Scala的类和方法、函数都可以是泛型
2、上界:表示泛型的类型必须是某种类型或者其类型的子类,语法:<: ,对类型进行限定
3、下界:表示泛型的类型必须是某种类型或者其类型的父类,语法:>:
4、View Bounds,可以进行隐式转换,将其转换成目标类型,是上边界和下边界的加强版,
语法 T <% U,T必须是U的类型,但是又没有直接继承自U,所以要通过隐式转换操作
5、T:ClassTag,一种类型转换,编译的时候类型不够,需要通过JVM的runtime来通过运行时的获取信息
6、逆变和协变,语法:-T和+T,-T:子类能参加,父类也能参加(逆变), +T:父类能参加,子类也能参加:(协变)
/**
* 描述:Scala参数类型
* 作者: sunrunzhi
* 时间: 2018/11/21 18:42
*/
class Person(val name:String){ def talk(person: Person): Unit ={
println(this.name+" is talking to "+person.name)
}
} class Worker(name:String) extends Person(name)
class Dog(val name:String) class Club[T<:Person](p1:T,p2:T){
def communicate=p1.talk(p2)
} class Club2[T<%Person](p1:T,p2:T){
def communicate=p1.talk(p2)
} object C15 { def main(args: Array[String]): Unit = {
implicit def dog2Person(dog:Dog)=new Person(dog.name)
val p=new Person("张三")
val t=new Worker("李四")
val g=new Dog("大黄")
new Club(t,p).communicate
new Club2[Person](t,g).communicate } }
package com.wanji.scala.test /**
* 描述:Scala参数类型
* 作者: sunrunzhi
* 时间: 2018/11/21 18:42
*/
class Person(val name:String){ def talk(person: Person): Unit ={
println(this.name+" is talking to "+person.name)
}
} class Worker(name:String) extends Person(name)
class Dog(val name:String) class Club[T<:Person](p1:T,p2:T){
def communicate=p1.talk(p2)
} class Club2[T<%Person](p1:T,p2:T){
def communicate=p1.talk(p2)
} class A
class AA extends A
class AAA extends AA class Meeting[+T]//协变
class Yeeting[-T]//逆变 object C15 { def ByMeeting(meeting: Meeting[AA]): Unit ={
println("协变")
} def ByYeeting(meeting: Yeeting[AA]): Unit ={
println("逆变")
} def main(args: Array[String]): Unit = { ByMeeting(new Meeting[AAA]())
ByYeeting(new Yeeting[A]()) implicit def dog2Person(dog:Dog)=new Person(dog.name)
val p=new Person("张三")
val t=new Worker("李四")
val g=new Dog("大黄")
new Club(t,p).communicate
new Club2[Person](t,g).communicate } }
Scala实战高手****第15课:Scala类型参数编程实战及Spark源码鉴赏的更多相关文章
- Scala实战高手****第8课:零基础实战Scala最常用数据结构Map和Tuple及Spark源码鉴赏
本课内容1.Map和Tuple在Spark源码中的鉴赏2.Map和Tuple代码操作实战 ------------------------------------------------------- ...
- Scala实战高手****第12课:Scala函数式编程进阶(匿名函数、高阶函数、函数类型推断、Currying)与Spark源码鉴赏
/** * 函数式编程进阶: * 1.函数和变量一样作为Scala语言的一等公民,函数可以直接赋值给变量 * 2.函数更常用的方式是匿名函数,定义的时候只需要说明输入参数的类型和函数体即可,不需要名称 ...
- Scala实战高手****第6课 :零基础实战Scala集合操作及Spark源码解析
本课内容1.Spark中Scala集合操作鉴赏2.Scala集合操作实战 --------------------------------------------------------------- ...
- Scala高手实战****第20课:Scala提取器、注解深度实战详解及Spark源码鉴赏
Spark中的源码的提取器和注解 @SparkContext.scala @ volatile 线程专用 保证线程间共享内容的一致性 @volatile private var _dagSchedul ...
- Scala实战高手****第13课:Scala模式匹配实战和Spark源码鉴赏
package com.dt.spark.scala.bascis class Dataframework case class Computerframework (name:String,popu ...
- Scala实战高手****第7课:零基础实战Scala面向对象编程及Spark源码解析
/** * 如果有这些语法的支持,我们说这门语言是支持面向对象的语言 * 其实真正面向对象的精髓是不是封装.继承.多态呢? * --->肯定不是,封装.继承.多态,只不过是支撑面向对象的 * 一 ...
- Scala高手实战****第19课:Scala的包、继承覆写及Spark源码鉴赏
1.SparkSession.scala //导入某个类 import scala.beans.Introspector //导入某包下所有的类 import scala.beans._ //导入某包 ...
- Scala高手实战****第18课:Scala偏函数、异常、Lazy值编码实战及Spark源码鉴赏
本篇文章主要讲述Scala函数式编程之偏函数,异常,及Lazy 第一部分:偏函数 偏函数:当函数有多个参数,而在使用该函数时不想提供所有参数(比如函数有3个参数),只提供0~2个参数,此时得到的函数便 ...
- Scala实战高手****第16课:Scala implicits编程彻底实战及Spark源码鉴赏
隐式转换:当某个类没有具体的方法时,可以在该类的伴生对象或上下文中查找是否存在隐式转换,将其转换为可以调用该方法的类,通过代码简单的描述下 一:隐式转换 1.定义类Man class Man(val ...
随机推荐
- Planning your upgrade with Upgrade Advisor
Planning your upgrade with Upgrade Advisor You should use the Upgrade Advisor tool (if it is availab ...
- c++ fstream用法
今天介绍一个复制 粘贴的函数,用fstream实现 #include "stdafx.h" #include<iostream> #include<fstream ...
- 转:安装成功的nginx如何添加未编译安装模块
原已经安装好的nginx,现在需要添加一个未被编译安装的模块 举例说明:安装第三方的ngx_cache_purge模块(用于清除指定URL的缓存) nginx的模块是需要重新编译nginx,而不是像a ...
- HDU 1395
2^x mod n = 1 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- DP---背包问题
http://www.hawstein.com/posts/dp-knapsack.html http://www.cnblogs.com/wwwjieo0/archive/2013/04/01/29 ...
- 【洛谷 P1653】 猴子 (并查集)
题目链接 没删除调试输出,原地炸裂,\(80\)->\(0\).如果你要问剩下的\(20\)呢?答:数组开小了. 这题正向删边判连通性是很不好做的,因为我们并不会并查集的逆操作.于是可以考虑把断 ...
- bzoj 1016 深搜
首先我们知道MST的一些性质,对于这道题来说就是,假设我们先求出一颗MST设为G,由已知边权相同的边最多会有10条,那么假设我们在这10条边中选取size条边∈G,那么我们在这边权相同的边集E中任意选 ...
- inno setup 5 添加快捷方式默认选中
转载:https://www.cnblogs.com/x_wukong/p/5012412.html https://zhidao.baidu.com/question/312006120.html ...
- 解决小米/红米手机无法进行jdwp调试的问题
问题描述:在逆向一个app,研究环境是一台红米2,需要使用jdwp接口,也就是ddms下面这个界面: 但神奇的是,同一台主机上,模拟器的进程可以显示在ddms界面上,红米2确一个进程都没有显示出来.c ...
- Java易错知识点(2) - 在读取Cookie时除了Key,Value是得不到其他信息的
全文总结: 在读取Cookie,然后操作时,除了getName(),getValue()外,不要妄图得到其他信息,如下方法不会得到值的: cookie.getMaxAge(); cookie.getD ...