个人随笔
目录
Scala学习之路 (十)Scala的上届和下届
2019-12-21 23:42:13

在指定泛型类型时,有时需要界定泛型类型的范围,而不是接收任意类型。比如,要求某个泛型类型,必须是某个类的子类,这样在程序中就可以放心的调用父类的方法,程序才能正常的使用与运行。此时,就可以使用上下边界Bounds的特性;

Scala的上下边界特性允许泛型类型是某个类的子类,或者是某个类的父类;

U >: T

这是类型下界的定义,表示下届为T,也就是U必须是类型T的父类(或本身,自己也可以认为是自己的父类)。

S <: T

这是类型上界的定义,表示上届为S,也就是S必须是类型T的子类(或本身,自己也可以认为是自己的子类)。

代码实例

  1. object TestScala {
  2. //下届
  3. def getCard[T>:B](s:T):Unit={
  4. println("AAA");
  5. }
  6. //上届
  7. def getCard2[T<:B](s:T):Unit={
  8. println("BBB");
  9. }
  10. def main(args: Array[String]): Unit = {
  11. //这里用的是T>:B 表示下届为B,也就是T必须是B的父类(包括B)
  12. //getCard[C](new C())//Error:(13, 12) type arguments [C] do not conform to method getCard's type parameter bounds [T >: B]
  13. getCard[B](new B())
  14. getCard[B](new C())
  15. getCard[A](new A())
  16. //这里D不是B的子类
  17. //getCard[B](new D())//Type mismatch, expected: B, actual: D
  18. //这里用的是T<:B 表示上届为B,也就是T必须为B的子类(包括B)
  19. //getCard2[A](new A())//Error:(18, 13) type arguments [A] do not conform to method getCard2's type parameter bounds [T <: B]
  20. getCard2[B](new B())
  21. getCard2[C](new C())
  22. getCard2[B](new C())
  23. //getCard2[B](new D())//Type mismatch, expected: B, actual: D
  24. }
  25. }
  26. class A{}
  27. class B extends A{}
  28. class C extends B{}
  29. class D{}
 194

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2