gpt4 book ai didi

scala - scala如何对待伴生对象?

转载 作者:行者123 更新时间:2023-12-04 23:45:01 25 4
gpt4 key购买 nike

我是 Scala 的新手有Java背景。

java当我们想在类的不同对象之间共享任何字段时。我们声明该字段 static .

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 中,我们不能在 class 中声明静态字段。 , 我们需要使用 object (伴随对象)为此。
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如何对待伴生对象?
这两个关键字 ( class and object) 有何不同?
为什么 scala 不让我们访问 NO_Of_TYRES直接上课?

最佳答案

伴随对象是单例类实例(和定义),只是记忆一下 java 中的单例或多或少:

class Foo {
private Foo() { }
/* boilerplate to prevent cloning */
private static Foo instance = new Foo();
public static Foo getInstance() { return instance; }

public int bar() { return 5; }
}

然后调用这个对象的方法栏:
Foo.getInstance().bar();

Scala 删除了所有这些样板文件,让您只需
object Foo { 
def bar: Int = 5
}

并称它为你只需要
Foo.bar

现在“对象”和“伴侣对象”有什么区别?它实际上很简单——伴生对象(因此与类在同一个文件中定义并具有相同名称的对象)可以访问它的相关类私有(private)字段和方法,这可能就是为什么 scala 作者决定它应该驻留在同一个文件 - 以便对私有(private)字段的引用与其声明在同一个文件中(我认为在 Java 和 Scala 中总是如此,除非使用反射魔法)

关于scala - scala如何对待伴生对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30531227/

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