温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

scala的泛型类怎么使用

发布时间:2021-12-08 15:00:39 来源:亿速云 阅读:110 作者:iii 栏目:大数据

本篇内容介绍了“scala的泛型类怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

泛型类指可以接受类型参数的类。泛型类在集合类中被广泛使用。

定义一个泛型类

泛型类使用方括号 [] 来接受类型参数。一个惯例是使用字母 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 :: elementselements 放到了一个将元素 x 添加到 elements 的头部而生成的新列表中)。

使用

要使用一个泛型类,将一个具体类型放到方括号中来代替 A

val stack = new Stack[Int]stack.push(1)stack.push(2)println(stack.pop)  println(stack.pop)

实例对象 stack 只能接受整型值。然而,如果类型参数有子类型,子类型可以被传入:

class Fruitclass Apple extends Fruitclass Banana extends Fruit
val stack = new Stack[Fruit]val apple = new Appleval banana = new Banana
stack.push(apple)stack.push(banana)

Apple 和类 Banana 都继承自类 Fruit,所以我们可以把实例对象 applebanana 压入栈 Fruit 中。

注意:泛型类型的子类型是*不可传导*的。这表示如果我们有一个字母类型的栈 Stack[Char],那它不能被用作一个整型的栈 Stack[Int]。否则就是不安全的,因为它将使我们能够在字母型的栈中插入真正的整型值。结论就是,只有当类型 B = A 时, Stack[A]Stack[B] 的子类型才成立。因为此处可能会有很大的限制,Scala 提供了一种 类型参数注释机制 用以控制泛型类型的子类型的行为。

“scala的泛型类怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI