Scala入门到精通——第十七节 类型参数(一)

  • 时间:
  • 浏览:7

上面的类型变量界定都是作用于方法Compare上,类型变量界定除了作用于方法上外,还还里能 对类中的泛型进行范围限定,类似于 :

上面这种大难题还里能 通过视图界定来正确处理,代码如下:

上一节将的类型变量界定建立在类继承层次行态的基础上,但有然后这种限定只能满足实际要求,肯能希望跨越类继承层次行态时,还里能 使用视图界定来实现的,其上面的原理是通过隐式转换(我门我门我门我门在下一讲中会删改讲解哪些地方是隐式转换)来实现。视图界定利用<%符号来实现,在上一节中提到:

通过上述代码发现,肯能newFirst的类型刚好是T的基类,R就直接是newFirst的类型。肯能newFirst的类型都是T的基类,那R就会是T和newFirst的类型的一块儿基类。当限定返回变量类型时,类似于 val p6:Pbook=p4.replaceFirst(weirdFirst),肯能p4为Pair1[Pbook],也即T为Pbook类型,而replaceFirst(weirdFirst)中的weirdFirst为Pbook的子类,违反了R>:T的下界限定,从而编译出错。从这里我门我门我门我门还里能 都看,下界的作用主就说 保证类型安全

肯能还里能 输入Person类也合法语句,则Person类要实现Comparable接口,代码如下:

添加公众微信号,都只能解更多最新Spark、Scala相关技术资讯

从上述代码还里能 都看,compare方法中肯能输入的类型趋于稳定Comparable类对应继承层次行态中,则是合法的,许多语句编译会报错,类似于 :

肯能在使TypeVariableBound类编译通过,此时还里能 利用类型变量界定对泛型T进行界定,指明所有的泛型T都实现了Comparable接口,代码如下:

除了上界之外,还有个非常重要的内容就说 下界,下界通过>:符号来标识,代码如下:

还里能 都看,视图界定比类型变量界定的限制要宽松许多,它不但还里能 是类继承层次行态中的类,也还里能 跨越类继承层次行态,这后台的实现方法是通过隐式转换来进行的。

查看Scala API文档还里能 都看



Int类会隐式转添加RichInt类,RichInt并都是直接实现Comparable口,就说 通过ScalaNumberProxy类将Comparable中的方法继承过来:



ScalaNumberProxy混入了OrderedProxy,而OrderedProxy又混入了Ordered



trait Ordered混入了Comparable接口

下类代码其实是类型参数中时不时 提到的上界,这是肯能它限定了继承层次行态中最顶层的类,类似于 T <: AnyVal表示泛型T的类型的最顶层类是AnyVal,所有输入是AnyVal的子类都是合法的,其它的都是非法的,肯能被称为上界,怪怪的像x<=3就说 的数学比较。

从上面的例子中不难 看出,类型变量界定还里能 对方法和类中的泛型进行范围界定,这种界定建立在类继承层次行态的基础之上,通过<:符号将泛型的范围进行一步减少。