gpt4 book ai didi

Scala 上限

转载 作者:行者123 更新时间:2023-12-05 09:04:01 27 4
gpt4 key购买 nike

在典型的 Scala 上界示例中

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)

还有这个?

class PetContainer1(p: Pet) {
def pet: Pet = p
}

val dogContainer1 = new PetContainer1(new Dog)
val catContainer1 = new PetContainer1(new Cat)

使用类型上限与直接使用抽象类/特征相比有什么优势?

最佳答案

有了上限,您可以拥有特定子类型的集合 - 因此仅限于猫或狗,您可以从 def pet 返回特定子类型。 PetContainer1 不是这样。

丢失更准确的类型信息示例:

val doggo: Dog = new Dog
val dogContainer1 = new PetContainer1(doggo)
// the following won't compile
// val getDoggoBack: Dog = dogContainer1.pet

val dogContainer2 = new PetContainer[Dog](doggo)
// that works
val getDoggoBack: Dog = dogContainer2.pet

你不能把猫放进狗容器里:

// this will not compile
new PetContainer[Dog](new Cat)

如果您要处理多个元素的集合,它会变得更加重要。

关于Scala 上限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69131184/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com