代码之家  ›  专栏  ›  技术社区  ›  Bogdan Vakulenko

类型成员细化中的类型范围

  •  0
  • Bogdan Vakulenko  · 技术社区  · 7 年前
    class Animal
    class Cat extends Animal
    
    trait ZPar {
      type K
      def get(i: K)
    }
    
    def zz(t:ZPar{ type K >: Animal } ) = {
       t.get(new Cat) //compiled! why?
    }
    

    K >: Animal 我路过 Cat 这绝对不是超级类型的 Animal .

    2 回复  |  直到 7 年前
        1
  •  1
  •   Alexey Romanov    7 年前

    争论 t.get 必须有类型 t.K . 编译器不知道它到底是什么类型,但它知道它是 Animal 因此 Cat . 所以任何类型的值 t、 K公司 也。

        2
  •  1
  •   Dmytro Mitin    7 年前

    没必要这样 new Cat 是猫的类型。 新猫 不仅可以是 Cat , Animal AnyRef Any .

    所以在这里 K 推断为最小可能类型,即。 动物 .

    推荐文章