泛型类
package spark.examples.scala.generics class GenericClass[K, V](val k: K, val v: V) { def print() { println(k + "," + v) } } object GenericClass { def main(args: Array[String]) { ///不需要指定K,V的类型,自动推断 val gc = new GenericClass("ABC", 100) ///显式指定K,V的类型,自动推断 val gc2 = new GenericClass[String, Integer]("ABC", 100) gc.print gc2.print } }
范型方法
package spark.examples.scala.generics //仅仅在方法上指定泛型参数 class GenericMethod { def print[T](content: T) { println(content) } } object GenericMethod { def main(args: Array[String]) { val gm = new GenericMethod gm.print(100) //不需要指定T的类型,由100自动推断 } }
范型上下界
有时,需要明确指定范型类T是某个类或者Trait的子类型,比如Comparable接口的子类,这样,才能对泛型类对象进行比较操作。Comparable是泛型的上界?
//指定T必须是实现了Comparable接口的类型, class ComparableGenericClass[T <: Comparable[T]](val v1: T, val v2: T) { def min() = { if (v1.compareTo(v2) < 0) v1 else v2 } } object GenericClass { def main(args: Array[String]) { val cgc = new ComparableGenericClass[String]("10", "20") println(cgc.min()) } }
有时,也需要指定泛型T必须是某个类型的超累,