scala的泛型类怎么使用
本篇内容介绍了“scala的泛型类怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
创新互联-专业网站定制、快速模板网站建设、高性价比托克逊网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式托克逊网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖托克逊地区。费用合理售后完善,十年实体公司更值得信赖。
泛型类指可以接受类型参数的类。泛型类在集合类中被广泛使用。
定义一个泛型类
泛型类使用方括号 []
来接受类型参数。一个惯例是使用字母 A
作为参数标识符,当然你可以使用任何参数名称。
class Stack[A] { private var elements: List[A] = Nil def push(x: A) { elements = x :: elements } def peek: A = elements.head def pop(): A = { val currentTop = peek elements = elements.tail currentTop }}
上面的 Stack
类的实现中接受类型参数 A
。这表示其内部的列表,var elements: List[A] = Nil
,只能够存储类型 A
的元素。方法 def push
只接受类型 A
的实例对象作为参数(注意:elements = x :: elements
将 elements
放到了一个将元素 x
添加到 elements
的头部而生成的新列表中)。
使用
要使用一个泛型类,将一个具体类型放到方括号中来代替 A
。
val stack = new Stack[Int]stack.push(1)stack.push(2)println(stack.pop) println(stack.pop)
实例对象 stack
只能接受整型值。然而,如果类型参数有子类型,子类型可以被传入:
class Fruit
class Apple extends Fruit
class Banana extends Fruit
val stack = new Stack[Fruit]
val apple = new Apple
val banana = new Banana
stack.push(apple)
stack.push(banana)
类 Apple
和类 Banana
都继承自类 Fruit
,所以我们可以把实例对象 apple
和 banana
压入栈 Fruit
中。
注意:泛型类型的子类型是*不可传导*的。这表示如果我们有一个字母类型的栈 Stack[Char]
,那它不能被用作一个整型的栈 Stack[Int]
。否则就是不安全的,因为它将使我们能够在字母型的栈中插入真正的整型值。结论就是,只有当类型 B = A
时, Stack[A]
是 Stack[B]
的子类型才成立。因为此处可能会有很大的限制,Scala 提供了一种 类型参数注释机制 用以控制泛型类型的子类型的行为。
“scala的泛型类怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!
标题名称:scala的泛型类怎么使用
文章分享:http://scyanting.com/article/isjgsh.html