繁体   English   中英

Scala中有诸如类方法之类的东西吗?

[英]Are there such thing as class methods in Scala?

许多oo语言为类方法和类变量提供了一定的便利。 例如Ruby允许使用元类。 在Scala中以类似的方式查看伴侣对象是否公平?

在Scala中以类似的方式查看伴侣对象是否公平?

是的,这是考虑它们的合理方法。

在JVM上,类的含义不同于在Ruby或其他动态语言中的对象。 当然,您可以将类的表示形式表示为类Class[_]的特殊对象,但是它主要用于反射,例如,不能具有自定义方法。 但是,JVM具有与类相关联的静态方法和字段的概念,并且不需要使用该类的对象:

public class SomeClass 
    public static int add(int x, int y) { return x + y; }
}

public class OtherClass {
    public static void main() {
        int z = SomeClass.add(1, 2);
    }
}

这些方法和字段本质上是“全局”的(除非我们考虑使用类加载器机制),例如,方法不能在子类中覆盖。

Scala不允许您直接定义和使用静态-语言中没有“静态”的概念。 但是,在Scala中,您可以定义可用于模拟静态字段和方法的单例对象,同时它们比静态函数强大得多,例如,它们可以参与继承。 在内部,这些对象是Scala编译器为您生成的特殊类的实例。

Scala还具有一种特殊的此类单例对象,称为伴侣对象,它们与某些类共享名称:

class SomeClass

object SomeClass

国内这些对象是完全不同的类比的情况下SomeClass (它可以作为访问SomeClass.type ),但斯卡拉对待他们特殊的方式,例如,你可以访问SomeClass私人会员SomeClass同伴对象,反之亦然。 伴随对象还提供其他隐式作用域。 但是, SomeClass.typeSomeClass是完全不同的类。

简而言之,是的,您可以将伴随对象视为“类”方法和字段的容器,但仅在某种程度上。 伴侣对象无论如何都不是元类。 它们具有完全不同的语义和实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM