什么是泛型
可以让类型作为方法,类,接口等的参数,就好比一种特殊的参数
Generics means parameterized types. The idea is to allow type
(Integer, String, … etc, and user-defined types) to be a parameter to
methods, classes, and interfaces. Using Generics, it is possible to
create classes that work with different data types.
为什么需要泛型
与java类似,如果不指定泛型,在集合中,比如Array,本质Object数组,里面各种元素都可以放,如果把不同的元素放里面,写的时候不会报错,但遍历的时候就有可能报错,比如放了整数和字符串,然后遍历的时候调用字符串的方法,恰好整数没有这个方法,就会报错.
泛型大部分时候配合集合一起使用的
Object is the superclass of all other classes and Object reference can
refer to any type object. These features lack type safety. Generics
adds that type safety feature.
泛型例子
object Test_021 {
def main(args: Array[String]): Unit = {
val stack = new Stack[Int]
stack.push(1)
stack.push(2)
println(stack.pop())//2
print(stack.pop())//1
}
}
//定义泛型A
class Stack[A] {
//规定集合元素的泛型
private var elements: List[A] = Nil
//规定参数泛型
def push(x: A): List[A] = {
elements = x :: elements
elements
}
//规定返回值泛型
def peek(): A = elements.head
//规定返回值泛型
def pop(): A = {
var currentTop = peek()
elements = elements.tail
currentTop
}
}
泛型名称未必是一个字母
object Test_021 {
def main(args: Array[String]): Unit = {
val stack = new Stack[Int]
stack.push(1)
stack.push(2)
println(stack.pop())//2
print(stack.pop())//1
}
}
//定义泛型
class Stack[That] {
//规定集合元素的泛型
private var elements: List[That] = Nil
//规定参数泛型
def push(x: That): List[That] = {
elements = x :: elements
elements
}
//规定返回值泛型
def peek(): That = elements.head
//规定返回值泛型
def pop(): That = {
var currentTop = peek()
elements = elements.tail
currentTop
}
}