【发布时间】:2011-11-10 06:14:18
【问题描述】:
我知道你可以间接定义它们 用伴随对象实现类似的东西,但我想知道为什么作为一种语言设计从类定义中删除了静态。
【问题讨论】:
-
我的猜测是,如果没有
static,Scala 的整体设计就会简化。我们已经有了类和作为类实例的对象,所以单例对象(只实例化一次的类)的想法非常自然和简单。顺便说一句,在 JVM 级别,单例对象实际上是一个类的单个实例。单例对象上的方法不会编译为static方法。这对于定义继承自特征的单例对象之类的事情很有用。 -
@kipton 不错的想法,而且非常接近目标。最初的决定是放弃静态(因为不是 OO,并且有几个命名空间问题)。然后将单例对象添加到语言中,作为一种更好的方式来填补静态在 Java(和其他 C++ 衍生品)中所扮演的角色。
-
我编辑了这个问题以澄清 Scala 的单例对象的成员与 Java 的
static成员并不完全相同。 -
@kipton,实际上,如果您查看生成的字节码,您会看到该对象被编译为具有静态方法的类。
-
@Numan - 所谓的“静态转发器”是专门为支持 Java 互操作而实现的,Scala 内部不使用这些方法。
标签: class scala static language-design static-members