zoukankan      html  css  js  c++  java
  • scala之旅-核心语言特性【类型上界】(二十一)

    在Scala中,类型参数和抽象类型成员可能受类型边界约束。这种类型界限限制了类型变量的具体值,并可能揭示有关此类成员的更多信息。一个上界类型T<:A ,这样声明表示类型变量T 是依赖于类型A的子类型。下面的例子描述了类型参数PetContainer的上界类型关系。

    abstract class Animal {
     def name: String
    }
    
    abstract class Pet extends Animal {}
    
    class Cat extends Pet {
      override def name: String = "Cat"
    }
    
    class Dog extends Pet {
      override def name: String = "Dog"
    }
    
    class Lion extends Animal {
      override def name: String = "Lion"
    }
    
    class PetContainer[P <: Pet](p: P) {
      def pet: P = p
    }
    
    val dogContainer = new PetContainer[Dog](new Dog)
    val catContainer = new PetContainer[Cat](new Cat)
    // 编译不会通过
    val lionContainer = new PetContainer[Lion](new Lion)

    【注:貌似跟class PetContainer[Pet] 声明方式没啥区别】

    类PetContainer必须带一个类型参数P,且这个参数P必须是Pet的子类型。Dog和Cat都是Pet 的子类型,所以我们可以创建PetContainer[Dog]和PetContainer[Cat]。然而如果我们尝试创建一个PetContainer[Lion],就会报如下的错误:

    type arguments [Lion] do not conform to class PetContainer's type parameter bounds [P <: Pet]

    这是因为Lion不是Pet的子类型

  • 相关阅读:
    ConcurrentHashMap实现原理及源码分析
    Java原子类实现原理分析
    谈谈Java中的volatile
    谈谈Java中的ThreadLocal
    HashMap实现原理及源码分析
    浅谈Oracle权限体系
    Oracle闪回技术详解
    数据结构(二)之二叉树
    图解排序算法(五)之快速排序——三数取中法
    图解排序算法(四)之归并排序
  • 原文地址:https://www.cnblogs.com/zhouwenyang/p/14003676.html
Copyright © 2011-2022 走看看