Scala 类型界定

class User(val userName: String,val age: Int) extends Comparable[User] {
  override def compareTo(o: User): Int = this.age - o.age
}

object OrderingDemo extends App {

  /**
    * 类型界定,上界
    *
    * @param u1
    * @param u2
    * @tparam T T必须是Comparable[T]的子类
    * @return
    */
  def compare[T <: Comparable[T]](u1: T, u2: T): Int = { 

    if (u1.compareTo(u2) == 0) 0 else if (u1.compareTo(u2) > 0) 1 else -1

  }

  val u1 = new User("u1", 18)
  val u2 = new User("u2", 19)

  //  compare(u1,u2) //class User(userName: String, age: Int)的话,编译不通过

  println(compare(u1,u2)) //class User(val userName: String,val age: Int) extends Comparable[User]

}
时间: 2024-10-12 20:35:25

Scala 类型界定的相关文章

scala多重界定

Scala 多重界定分为以下几种: 1.    T  <: A with   B    T是A或B的子类 2.    T  >: A with   B      A或B是T的子类   一般不用 3.    T  >:  A  <:    B       同时有上界和下界   A下是界,B是上界  ,A是B的子类 4.    T:A : B                上下文界定   T必须同时满足存在AT和BT的隐试转换值 5.  T <%  A <%    B   

Scala 深入浅出实战经典 第47讲:Scala多重界定代码实战及其在Spark中的应用

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2 技术爱好者尤其是大数据爱好者 可以加DT大数据梦工厂的qq群 DT大数据梦工厂① :462923555 DT大数据梦工厂②:437123764 DT大数据梦工厂③

Scala 深入浅出实战经典 第48讲:Scala类型约束代码实战及其在Spark中的应用源码解析

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2 技术爱好者尤其是大数据爱好者 可以加DT大数据梦工厂的qq群 DT大数据梦工厂① :462923555 DT大数据梦工厂②:437123764 DT大数据梦工厂③

scala类型推断及库方法设计原则和==与java有何差别

scala类型推断 方法msortSwapped(abcd)(_>_) 通常,一旦有需要推断多台方法类型参数的任务时,类型推断器就只参考第一个参数列表中所有参数类型,但不会参考之后其他参数.因为方法msortSwapped是柯里化的方法,带两个参数列表,所以第二个参数(也就是说,那个函数值)将不会用来做决定方法参数的参考. 因此这种类型推断方案也隐含了如下库方法设计原则:如果需要把参数设计为若干非函数值及一个函数值的某种多态方法,需要把函数参数放在柯里化参数列表的最后面.这样一来,方法的正确类型

第47讲:Scala多重界定代码实战及其在Spark中的应用源码解析

今天学习了scala的多重界定 T >: A <: B 表示T同时有下界和下界,下界为A,上界为B,A为B的子类型.下界必须写在前面,上界必须写在后面,位置不能颠倒. T<:A with B T是A或B的子类. T>:A with B A或B是T的子类 T <% A <% B T同时满足能够即可以通过隐式转换转变为A的类型,也可以通过隐式转换变为B的类型. T : A : B T必须同时满足存在A[T]这种类型的隐式值和B[T]类型的隐式值. 分享下更多的scala资源

Scala 上下文界定

上下文界定的类型参数形式为T:M的形式,其中M是一个泛型,这种形式要求存在一个M[T]类型的隐式值: /** * 上下文界定 */ @Test def testOrdering_Class_Context() = { class User(val userName: String, val age: Int) class UserOrderingObject extends Ordering[User] { override def compare(x: User, y: User): Int

Scala类型声明与定义、函数定义、流程控制、异常处理

Scala源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库. Scala的基础类型基本与javascript一致. Scala的数据类型全部相同于Java中,具有相同的内存占用和精度.以下表是有关可在Scala中所有的数据类型的细节: 数据类型 描述 Byte 8位有符号值.范围从-128到127 Short 16位有符号值.范围从-32768至32767 Int 32 位有符号值.范围从 -2147483648 to 2147483647 Long 64位

Scala类型详解

语法: Type ::= InfixType ?=>? Type | ?(?[?=>? Type] ?)? ?=>? Type | InfixType [ExistentialClause] ExistentialClause ::= ?forSome? ?{?ExistentialDc { semi ExistentialDcl} ?}? ExistentialDcl ::= ?type? TypeDcl | ?val? ValDcl InfixType ::= CompoundTyp

Scala类型约束代码实战及其在Spark中的应用源码解析之Scala学习笔记-39

package com.leegh.parameterization /** * @author Guohui Li */object Type_Contraints { def main(args: Array[String]): Unit = { def rocky[T](i: T)(implicit ev: T <:< java.io.Serializable) { println("Life is too short,you need Spark!") } rock