我是
Scala的新手,拥有
Java背景.
在java中我们想要在类的不同对象之间共享任何字段.我们声明该字段是静态的.
class Car { static NO_Of_TYRES = 4; // some implementation. public int getCarNoOftyres(){ NO_Of_TYRES; // although it's not a good practice to use static without class name //but we can directly access static member in same class . } }
但是在Scala中我们不能在类中声明静态字段,我们需要使用对象(伴随对象).
在scala我们会这样做,
class Car { println(NO_Of_TYRES); // scala doesn't let us do that. gives error println(Car.NO_Of_TYRES);// this is correct way. } object Car { val NO_Of_TYRES: Int = 4; }
我只是好奇,scala如何对待伴侣对象?
这两个关键词(类和对象)有什么不同?
为什么scala不允许我们直接在课堂上访问NO_Of_TYRES?
解决方法
我想引用关于同一主题的另一个答案:
What are the advantages of Scala’s companion objects vs static methods?
另见Odersky的书Programming in Scala – Chapter 4 – Classes and Objects的第4.3节
Scala将所有内容视为其实例的纯对象.在这个视图中,java静态成员不是任何实例的一部分,它生活在一个单独的不同生活中.
使用关键字对象和一些语法糖的技巧,您可以实现相同的结果,但保持规定的原则:实例化该对象的单个实例,并提供该实例的全局访问点.