关闭

scala类型限定

标签: scalatype-boundimmutable
521人阅读 评论(0) 收藏 举报
分类:

scala类型限定

以类型下界限定举例,S>:T意味着:

如果传入一个参数S,其类型与T相同,或者是T的父类型,那么将会使用类型S。如果传入一个类型T的子类型,那么将会使用类型T。

下面以代码来说明类型下界限定。
首先定义一个链表类:

case class ListNode[+T](h: T, t: ListNode[T]) {
        def head: T = h
        def tail: ListNode[T] = t
        //  以T为类型下界,返回类型为U,U为T的父类或者与T相同
        def prepend[U >: T](elem: U): ListNode[U] =
             ListNode(elem, this)
}

接下来定义几个具有继承关系的类型:

class Animal
class Canine extends Animal
class Dog extends Canine

下面来测试类型下界限定:

object LowerBoundTest {

  def main(args: Array[String]): Unit = {

    // v1, v2, v3, v4皆为immutable 变量    
    val empty: ListNode[Null] = ListNode(null, null)
    val v1 = empty.prepend(new Canine).prepend(new Canine) // ListNode[Canine]
    val v2 = v1.prepend(new Animal) //  ListNode[Animal]
    val v3 = v1.prepend(new Canine) //  ListNode[Canine]
    val v4 = v1.prepend(new Dog)  //  ListNode[Canine]

  }

}

参考:http://stackoverflow.com/questions/19428376/scala-covariance-and-lower-type-bounds-explanation

0
0
查看评论

Scala学习——泛型[T]的6种使用

package com.dtspark.scala.basics/** * 1,scala的类和方法、函数都可以是泛型。 * * 2,关于对类型边界的限定分为上边界和下边界(对类进行限制) * 上边界:表达了泛型的类型必须是"某种类型"或某种类型的"子类&quo...
  • fz2543122681
  • fz2543122681
  • 2017-02-21 17:32
  • 1314

scala 泛型之初解,定界,类型约束,逆变与协变

scala 的泛型应用如下: 一、初解 当构建一个类或者函数时,如果我们不知道(或者说不确定)传入的参数的具体数据类型,这时候可以泛型,例子如下: 1-1例子: object test0 extends App{ val str = "123" val intv =1...
  • u010666884
  • u010666884
  • 2016-07-27 10:58
  • 1280

泛型中的自限定类型

自限定类型强制泛型当做其自己的边界参数来使用。 package a; /** * Created by msc on 2017/1/15. */ class SelfBounded>{ T element; SelfBounded set(T arg){ ...
  • u013044000
  • u013044000
  • 2017-01-15 21:29
  • 942

Java 自限定的类型

在Java泛型中,有个好像是经常性出现的习惯用法,它相当令人费解:          class SelfBounded> { // ....}     这就像两面镜子一样彼此照向对方所引起的炫目效果一样,是一种无限反射...
  • wangkr111
  • wangkr111
  • 2015-12-06 21:35
  • 1441

将'const xxx'作为'xxx'的'this'实参时丢弃了类型限定

这样的错误一般是因为const限定符的问题。 ################a.h############### class A { public: size_t size(){return size;} }; ################main.cpp########...
  • Plutus_Lee
  • Plutus_Lee
  • 2015-03-09 10:43
  • 1272

传递实参时 丢弃了类型限定

将’const xxx’作为’xxx’的‘this’实参时丢弃了类型限定。这样的错误一般是因为const限定符的问题。如: #include <iostream> using namespace std; class Point3d { public: Point3d(float ...
  • Hacker_NO_1
  • Hacker_NO_1
  • 2015-08-27 19:52
  • 1670

java编程思想读书笔记 第十五章 泛型(自限定的类型)

1. 自限定的类型 在java泛型中,经常会出现如下的泛型写法:class SelfBounded<T extends SelfBounded<T>> SelfBounded类接受泛型参数T,而T由一个边界类限定,这个边界就是拥有T作为其参数的SelfBounded。这种写...
  • abc709272013
  • abc709272013
  • 2016-10-24 22:51
  • 903

Java泛型类型限定和通配符类型限定

泛型类型变量的限定 泛型的基础知识可以参考其他教程。 如果在方法前指定了,那么就是说,方法的这个泛型类型和类定义时的泛型类型无关,这个特性让泛型方法可以定义在普通类中而不是泛型类中。 我们都知道,泛型中可以限定类型变量必须实现某几个接口或者继承某个类,多个限定类型用&分隔,类必须放在限定列...
  • gjb724332682
  • gjb724332682
  • 2016-10-17 18:15
  • 3289

实参时丢弃了类型限定 原因

编译错误:    将'const xxx'作为'xxx'的'this'实参时丢弃了类型限定。    这样的错误一般是因为const限定符的问题。如: #include #include #inc...
  • mydriverc2
  • mydriverc2
  • 2015-03-30 14:15
  • 455

Scala入门到精通——第二十三节 高级类型 (二)

本节主要内容 中置类型(Infix Type) 存在类型 函数类型 抽象类型 关于语法糖的问题,在讲解程序语言时,我们常常听到“语法糖”这个术语,在百度百科中,它具有如下定义: 语法糖(Syntactic Sugar),也叫糖衣语法,是英国计算机科学家彼得·约翰·兰...
  • lovehuangjiaju
  • lovehuangjiaju
  • 2015-08-11 19:50
  • 10537
    个人资料
    • 访问:67078次
    • 积分:1055
    • 等级:
    • 排名:千里之外
    • 原创:27篇
    • 转载:17篇
    • 译文:1篇
    • 评论:29条
    最新评论