美文网首页Scala Tour
[译]Scala泛型类

[译]Scala泛型类

作者: steanxy | 来源:发表于2017-07-12 22:04 被阅读296次

泛型类是以一个类型作为参数的类。对于集合类特别有用。

定义泛型类

泛型类以一个类型作为参数,包含在[]中。试用字母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)  // prints 2
println(stack.pop)  // prints 1

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)

AppleBanana类都扩展了Fruit,所以我们可以在需要传入Fruit类型实例的地方传入applebanana实例。

注意:泛型的子类型是不可变的。意思是如果我们有一个Stack[Char],不能作为Stack[Int]使用。这是不合理的,因为那样我们就可以将整数放入字符型栈中。结论就是,Stack[A]只是Stack[B]的一个子类型,当且仅当B = A。这个条件相当严格,所以Scala提供了type parameter annotation mechanism来控制泛型的子类型行为。

相关文章

  • [译]Scala泛型类

    泛型类是以一个类型作为参数的类。对于集合类特别有用。 定义泛型类 泛型类以一个类型作为参数,包含在[]中。试用字母...

  • 好程序员大数据培训分享Scala系列之泛型

    好程序员大数据培训分享Scala系列之泛型,带有一个或多个类型参数的类是泛型的。 泛型类的定义: //带有类型参数...

  • Scala泛型

    泛型类是以类型作为参数,Scala类型参数放在方括号[]中,Java放在<>中 变型 Variance Scala...

  • Spark(七):scala类型系统编程实战

    一、泛型的操作 背景scala的类和方法1、函数都可以是泛型,在Spark源码中可以到处看到类和方法的类型,在实际...

  • Java 19-5.1泛型

    泛型类定义泛型类可以规定传入对象 泛型类 和泛型方法 泛型接口 如果实现类也无法确定泛型 可以在继承类中确定泛型:

  • 【泛型】通配符与嵌套

    上一篇 【泛型】泛型的作用与定义 1 泛型分类 泛型可以分成泛型类、泛型方法和泛型接口 1.1 泛型类 一个泛型类...

  • Scala泛型

    泛型的意思是 泛指某种具体的数据类型 , 在Scala中, 泛型用 [数据类型] 表示. 在实际开发中, 泛...

  • 泛型

    关于泛型类,泛型方法,泛型接口泛型类:public class FanXingLeiDemo {//这里是泛...

  • 泛型

    1.什么是泛型? 2.为什么需要泛型? 3.泛型类、接口 泛型类注意事项: 从泛型类派生子类 泛型接口 泛型接口的...

  • 泛型的使用

    泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法 泛型类 泛型接口 泛型通配符 泛型方法 静态方法与...

网友评论

    本文标题:[译]Scala泛型类

    本文链接:https://www.haomeiwen.com/subject/ihrihxtx.html