class Stack[+A] {
def push[B >: A](elem: B): Stack[B] = new Stack[B] {
override def top: B = elem
override def pop: Stack[B] = Stack.this
override def toString() = elem.toString() + " " +
Stack.this.toString()
}
def top: A = error("no element on stack")
def pop: Stack[A] = error("no element on stack")
override def toString() = ""
}
object VariancesTest extends Application {
var s: Stack[Any] = new Stack().push("hello");
s = s.push(new Object())
s = s.push(7)
Console.println(s)
}
如图:
[B >: A]
是一种较低的类型。这意味着它B
被限制为超类型A
。
类似地[B <: A]
是一个上层类型绑定,意味着它B
被约束为一个子类型A
。
在scala中最高层级的类型不是object,而是any,这里意味着B的类型要比A的层级更高