[关闭]
@student2018 2018-10-13T07:24:56.000000Z 字数 1100 阅读 607

Scala的类型参数

Scala


在Scala中,可以使用类型参数来实现类和函数,这样的类和函数可以用于多种类型。
有时,需要对类做出限制。
类型变量界定
class Pair[ T <: Comparable[T] ](val first:T,val second:second)
这里意味着T必须是Comparable[T]的子类型,用<:表示为添加了一个上界。
<% 表示视图界定,它要求存在一个T可以被隐式转换成Comparable[T]
T:M 上下文界定,它要求必须存在一个类型为M[T]的隐式值。

  1. package student.scala
  2. object App {
  3. def foo(x: Array[String]) = x.foldLeft("")((a, b) => a + b)
  4. def main(args: Array[String]) {
  5. println("Hello World!")
  6. println("concat arguments = " + foo(args))
  7. val a = MyPair(100, 2)
  8. println(a.smaller)
  9. val susan = new Student
  10. val fred = new Person
  11. val jim = new Person
  12. makeFriendWith(susan, fred)
  13. makeFriends(new MyPair2(jim, susan))
  14. }
  15. trait Friend[-T] {
  16. def befriend(someone: T) {
  17. println(" we are friends now ")
  18. }
  19. }
  20. class Person extends Friend[Person] with Ordered[Person] {
  21. def compare(that: Person): Int = {
  22. return 0
  23. }
  24. }
  25. class Student extends Person
  26. def makeFriendWith(s: Student, f: Friend[Student]) {
  27. f.befriend(s)
  28. }
  29. def makeFriends(p: MyPair2[Person]) {
  30. println(s"$p._1 and $p._2 we are now friends")
  31. }
  32. class MyPair2[+T](val first: T, val second: T)
  33. class MyPair[T <% Ordered[T]](val first: T, val second: T) {
  34. def smaller = {
  35. if (first < second) first else second
  36. }
  37. }
  38. object MyPair {
  39. def apply[T <% Ordered[T]](first: T, second: T): MyPair[T] = {
  40. new MyPair(first, second)
  41. }
  42. }
  43. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注