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的子类型

  • 相关阅读:
    import nonWPF types into the markup
    using放在namespace里面还是外面?
    WCF Contracts
    Properties Specific to RoutedEventArgs
    sql将浮点表示的日期转化为标准日期
    Debug into WCF ServiceReference
    让form自适应高度
    Qt Access violation code c0000005 debug write access violation
    C++支持多态的几种方法
    java on CentOS
  • 原文地址:https://www.cnblogs.com/zhouwenyang/p/14003676.html
Copyright © 2011-2022 走看看