大数据系列修炼-Scala课程43
来源:互联网 发布:教育行业知乎 编辑:程序博客网 时间:2024/05/21 06:45
大数据系列修炼-Scala课程43:类型参数的广泛应用
核心内容:
1、Scala中类型变量Bounds代码实战及其在Spark中的应用源码解析
1、Scala中类型变量Bounds代码实战及其在Spark中的应用源码解析
1>所谓泛型类就是在类定义的时候,在类名的后面加一个[],在[]中指定它的类型为一个未知的类型,即T。此时就说这个类是一个泛型类。
2>类型变量的限定(界定)分为两种类型:类型变量的上界与类型变量的下界。
3>通过类型变量的限定,我们可以方便的表达出类型变量具有某些需要的特征和方法。
4>类型变量的上界定义方式:T<:Comparable[T],此时Comparable[T]即为T的上界,并具有相应的compareTo方法
5>类型变量的下界定义方式:def replaceFirst[R>:T],此时T即为R的下界。
实例程序1:
package IT03;//Scala中类型变量上界的先验知识储备//本程序的目的是实现Comparable接口中compareTo方法:凡是需要进行比较排序的类对象都应该实现Comparable接口中compareTo方法public class App1{ public static void main(String[] args) { //凡是需要进行比较排序的类都应该实现Comparable接口中的compareTo方法 Student student1 = new Student("zhang",80.0); Student student2 = new Student("lisi",90.0); int value = student1.compareTo(student2); System.out.println(value); System.out.println("------------"); //凡是Java中自带的数据类型都具有compareTo方法 System.out.println("zhang".compareTo("lisi")); System.out.println(new Double(80.0).compareTo(new Double(70.0))); } }class Student implements Comparable<Student> //泛型在具体使用的时候应该被定义{ public String name; public Double score; public Student(){} public Student(String name,Double score) { this.name = name; this.score = score; } public String toString() { return this.name +"\t" +this.score; } public int compareTo(Student obj) { return(int)((this.score - obj.score)); }}
实例程序2:
package IT03import scala.reflect.ClassTag//类型变量的上界实例化程序:上届的<:这种方式类似与Java中的extends机制object App { //本程序的目的是掌握Scala中类型变量Bounds代码实战,其在Spark中的应用源码解析的相关应用 def main(args:Array[String]):Unit= { val aa = new A[String]("zhang","ang") //凡是Java中自带的数据类型都已经实现了compareTo方法 println(aa.bigger()) }}class A[T<:Comparable[T]](val first:T,val second:T) //我们希望T这个泛型类具有Comparable接口中的compareTo方法{ //比较first和second这两个属性到底谁大 def bigger() = if(first.compareTo(second) > 0) first else second}
实例程序3:
package IT03//类型变量的上届的实例化程序2object App8{ def main(args:Array[String]):Unit= { val bb = new B[Student](new Student("zhang",80),new Student("lisi",90)) println(bb) //IT03.B@a298b7 } }class Student(val name:String,val score:Int) extends Comparable[Student]{ override def compareTo(obj:Student):Int = this.score - obj.score}class Worker(val name:String,val salary:Double) //Worker这个类就不能带入到T中,因为没有实现compareTo方法//注意:T这个泛型前提必须要实现Comparable接口中的compareTo方法:Java中自带的数据类型都已已经实现了,因此用户自定义的必须要//前提先实现这个接口中的compareTo方法class B[T<:Comparable[T]](val first:T,val second:T){ def bigger = if(first.compareTo(second)>0) first else second }
实例程序4:
package IT03object App9 { //本程序的目的是测试Java中类型变量的下界 def main(args:Array[String]):Unit= { //本节这个下界知识点我用下面的实例程序来进行说明:不太准确吧???? val aa = new Pair_Fan[Persion](new Persion,new Persion) val bb = new Pair_Fan[Teacher](new Teacher,new Teacher) }}class Pair_Lower[T](val first:T,val second:T){ def replaceFirst[R>:T](newFirst:R) = new Pair_Lower(newFirst,second) //R相当于Persion,T相当于Student}class Persion{}class Teacher extends Persion{}class Pair_Fan[Teacher](val fisrt:Teacher,val second:Teacher){}
实例程序5:
实例程序6:
思考:在类型变量的上界定义当中,A<:B,其中B应该是Java或Scala自带的数据类型,否则没有意义!!
实例程序7:
object App2{ def main(args : Array[String]): Unit = { //对T类型进行上界的约束:即传进来的T类型必须是Comparable类型或者是Comparable接口的子类型 def bigger[T <: Comparable[T]](first:T,second:T): T = { if(first.compareTo(second) > 0) first else second } println(bigger[String]("Spark","Hadoop")) var aa = new A[String]("Spark","Hadoop") aa.fun("Java","Hadoop") }}class A[F](var first:F,var second:F){ def fun[T>:F](newfirst:T) = new A[T](newfirst,second)}
0 0
- 大数据系列修炼-Scala课程43
- 大数据系列修炼-Scala课程01
- 大数据系列修炼-Scala课程02
- 大数据系列修炼-Scala课程03
- 大数据系列修炼-Scala课程04
- 大数据系列修炼-Scala课程05
- 大数据系列修炼-Scala课程06
- 大数据系列修炼-Scala课程07
- 大数据系列修炼-Scala课程08
- 大数据系列修炼-Scala课程09
- 大数据系列修炼-Scala课程10
- 大数据系列修炼-Scala课程11
- 大数据系列修炼-Scala课程12
- 大数据系列修炼-Scala课程15
- 大数据系列修炼-Scala课程17
- 大数据系列修炼-Scala课程18
- 大数据系列修炼-Scala课程19
- 大数据系列修炼-Scala课程20
- 第四周 项目3:单链表应用(3)
- appCan开发:用appcan.locStorage实现本地缓存
- JavaScript笔记:错误处理与调试
- eclipse总结:快捷键
- 最详细iOS App 上架流程
- 大数据系列修炼-Scala课程43
- 第4周项目5-多项式求和
- java类级别访问修饰符作用域
- Data Guard 主库创建表空间,备库MRP无法启动
- 第四周项目4
- 展讯平台关机闹钟自动开机不响铃问题及提前开机时间设置
- Could not resolve dependencies for project com.newhero.project:project-service:jar:0.0.1-SNAPSHOT:
- 第四周项目3—单链表 【3】判断是否递增
- 验证密码强度