如何在scala中定义多态引用变量

时间:2015-05-24 15:47:56

标签: scala

我刚刚开始探索Scala。假设我有以下代码:

abstract class Shape
case class Square() extends Shape
case class Circle() extends Shape
case class Triangle() extends Shape

有了这个,我可以在java中定义一个引用Shape的引用,然后我可以在其中存储Shape子类的对象:

Shape s=null;
s=new Circle(); 
s=new Square();
s=new Triangle();

我的问题: scala中的上述代码对应是什么(请注意,我确实只想定义一个变量,即此处的s)

2 个答案:

答案 0 :(得分:1)

您可以编写如下代码:

var s: Shape = null
s = new Circle()
s = new Square()
s = new Triangle()

但是,Scala原本打算在功能上使用。因此,您应尽可能使用val而不是varval与Java中的final非常相似。

每次使用var代替val时,您都应该100%确定要这样做。

此外,尽量避免使用null。相反,请使用Option。也许你对一些文献感兴趣,比如this book

答案 1 :(得分:0)

简单:

var s: Shape = null
s = Circle()
s = Square()
s = Triangle()

如果您是Option - 狂热者:

var s: Option[Shape] = None
s = Some(Circle())
s = Some(Square())
s = Some(Triangle())

如果你是val-zealot

val s1 = Circle()
val s2 = Square()
val s3 = Triangle()

与普遍看法相反,varnull在小范围内完全没问题。