@student2018
2018-10-13T07:24:56.000000Z
字数 1100
阅读 607
Scala
在Scala中,可以使用类型参数来实现类和函数,这样的类和函数可以用于多种类型。
有时,需要对类做出限制。
类型变量界定
class Pair[ T <: Comparable[T] ](val first:T,val second:second)
这里意味着T必须是Comparable[T]的子类型,用<:表示为添加了一个上界。
<% 表示视图界定,它要求存在一个T可以被隐式转换成Comparable[T]
T:M 上下文界定,它要求必须存在一个类型为M[T]的隐式值。
package student.scala
object App {
def foo(x: Array[String]) = x.foldLeft("")((a, b) => a + b)
def main(args: Array[String]) {
println("Hello World!")
println("concat arguments = " + foo(args))
val a = MyPair(100, 2)
println(a.smaller)
val susan = new Student
val fred = new Person
val jim = new Person
makeFriendWith(susan, fred)
makeFriends(new MyPair2(jim, susan))
}
trait Friend[-T] {
def befriend(someone: T) {
println(" we are friends now ")
}
}
class Person extends Friend[Person] with Ordered[Person] {
def compare(that: Person): Int = {
return 0
}
}
class Student extends Person
def makeFriendWith(s: Student, f: Friend[Student]) {
f.befriend(s)
}
def makeFriends(p: MyPair2[Person]) {
println(s"$p._1 and $p._2 we are now friends")
}
class MyPair2[+T](val first: T, val second: T)
class MyPair[T <% Ordered[T]](val first: T, val second: T) {
def smaller = {
if (first < second) first else second
}
}
object MyPair {
def apply[T <% Ordered[T]](first: T, second: T): MyPair[T] = {
new MyPair(first, second)
}
}
}