@student2018
2018-10-13T07:24:56.000000Z
字数 1100
阅读 633
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.scalaobject 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 Studentval fred = new Personval jim = new PersonmakeFriendWith(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 Persondef 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)}}}