Scala中的参数类型和延迟类型定义

在Scala中,有两种方式可以用来支撑高阶对象。

1. 类型参数:

  trait DataOps[A] {
    def show(a: A) = println(a)
  }

  val numbericOps = new DataOps[Int]{}

特质上有一个泛型A,当实例化类型的时候可以填入

2. 延迟定义到子类

trait DataOps {
  type A
  def show(a: A) = println(a)
}

val numbericOps = new DataOps {
  override type A = Int
}

特质上没有定义泛型,而是需要在子类中定义type A的具体类型

两种方法都能达到同一目的,如何取舍在于子类的类型是否稳定,如果变化很大,或者个数众多的话不建议使用第二种。

时间: 2024-08-02 01:12:46

Scala中的参数类型和延迟类型定义的相关文章

Scala类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用

转自:http://fineqtbull.iteye.com/blog/477994#bc2364938 有位je上的同学来短信向我问起了Scala类型参数中协变.逆变.类型上界和类型下界的使用方法和原理,自己虽然也刚学不久,在主要调查了<Programing in Scala>的19章后,试着在下面做一个总结.如有错误之处还请各位指正. 先说说协变和逆变(实际上还有非变).协变和逆变主要是用来解决参数化类型的泛化问题.由于参数化类型的参数(参数类型)是可变的,当两个参数化类型的参数是继承关系

scala学习笔记-类型参数中协变(+)、逆变(-)、类型上界(&lt;:)和类型下界(&gt;:)的使用

转载自  fineqtbull   http://fineqtbull.iteye.com/blog/477994 有位je上的同学来短信向我问起了Scala类型参数中协变.逆变.类型上界和类型下界的使用方法和原理,自己虽然也刚学不久,在主要调查了<Programing in Scala>的19章后,试着在下面做一个总结.如有错误之处还请各位指正. 先说说协变和逆变(实际上还有非变).协变和逆变主要是用来解决参数化类型的泛化问题.由于参数化类型的参数(参数类型)是可变的,当两个参数化类型的参数

python函数中的参数类型

python函数中的参数 python的函数类型详解

scala简要:高级函数和高级类型

在scala中,函数是头等公民,可以用变量存储函数,可以使用匿名函数,和带参数的函数.如果需要一个序列的值,一般从一个简单序列转化得出.函数可以在变量不再作用域内时被调用,这样的函数叫闭包. 柯里化是指将原来接受两个参数变成接受一个参数的函数的过程.不需要用return语句来返回函数值,函数的返回值就是函数体的值. scala中,用方括号来定义类型参数,从调用该方法的实际参数来推断出类型.视图界定 T<%V要求必须存在一个从T到V的隐式转换,Manifest对象是构造器的隐式参数,可用于上下文界

深入理解Scala中的隐式转换系统

博客核心内容: 1.Scala中的两种隐式转换机制以及隐式视图的定义方式 2.Scala中的隐式绑定可能所处的位置以及如何更好的使用隐式转换 3.Scala中的隐式转换相关操作规则 4.Scala中的隐式参数 5.Scala中的隐式类 6.Scala中的隐式对象 7.Scala中的两种隐式类型约束(结合Scala中的类型系统) 8.Predef类中的implicitly方法的用法介绍以及Ordering类型转化为Oredered类型的方式 1.Scala中的两种隐式转换机制以及隐式视图的定义方式

Scala中的协变(+),逆变(-),上界(&lt;:),下界(&gt;:)

对于一个带类型参数的类型,比如 List[T],如果对A及其子类型B,满足 List[B]也符合 List[A]的子类型,那么就称为covariance(协变) ,如果 List[A]是 List[B]的子类型,即与原来的父子关系正相反,则称为contravariance(逆变). 如果一个类型支持协变或逆变,则称这个类型为variance(翻译为可变的或变型),否则称为invariant(不可变的)   在Java里,泛型类型都是invariant,比如 List<String> 并不是 L

大数据学习之Scala中main函数的分析以及基本规则(2)

一.main函数的分析 首先来看我们在上一节最后看到的这个程序,我们先来简单的分析一下.有助于后面的学习 object HelloScala { def main(args: Array[String]): Unit = { println("I Love You Scala"); } } 如图所看到的,在Scala中能够使用object和class分别定义一个类.两者还是存在一些区别.以后我会在专门的博客中给予介绍. 在Scala中定义一个函数使用:def 来修饰 完整定义一个函数为

Scala 深入浅出实战经典 第53讲:Scala中结构类型实战详解

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2土豆:http://www.tudou.com/programs/view/pR_4sY0cJLs/优酷:http://v.youku.com/v_show/id_

Scala 深入浅出实战经典 第81讲:Scala中List的构造是的类型约束逆变、协变、下界详解

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-97讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2土豆:http://www.tudou.com/programs/view/ceac2IoB-ik/优酷:http://v.youku.com/v_show/id_