gpt4 book ai didi

scala - 关于Scala的下限

转载 作者:行者123 更新时间:2023-12-04 05:25:40 24 4
gpt4 key购买 nike

我正在学习Scala,并且对下限有疑问。

我有一个类:

class Queue[+T] {
def enqueue[U>:T](x : U) = new Queue[U]()
}

class Fruit
class Apple extends Fruit
class Orange extends Fruit
class Another

我发现的是,对于任何类型的队列,例如:
    val q1 = new Queue[Fruit]

下面的所有三行都将通过编译
    q1.enqueue(new Apple)
q1.enqueue(new Orange)
q1.enqueue(new Another)

我的问题是:如果使用下限定义U必须是T的父类(super class)型,那么在上面的代码中,Apple显然不是Fruit的父类(super class)型,如何将其传递给入队函数?

“另一个”类根本不在水果层次结构中,如何在入队功能中使用它?

这个你能帮我吗。

问候
凯文

最佳答案

如果您查看一下新队列返回的内容:

scala>  q1.enqueue(new Apple)
res0: Queue[Fruit] = Queue@17892d5

scala> q1.enqueue(new Orange)
res1: Queue[Fruit] = Queue@bdec44

scala> q1.enqueue(new Another)
res2: Queue[ScalaObject] = Queue@104bce3

您刚才说的U应该是T(或T)的父类(super class)型。这意味着“另一个”效果很好,因为ScalaObject是“另一个”和“水果”的最具体的父类(super class)型。

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

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