我刚刚开始探索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)
答案 0 :(得分:1)
您可以编写如下代码:
var s: Shape = null
s = new Circle()
s = new Square()
s = new Triangle()
但是,Scala原本打算在功能上使用。因此,您应尽可能使用val
而不是var
。 val
与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()
与普遍看法相反,var
和null
在小范围内完全没问题。