如何回答“为什么scala提供`object`关键字”?

时间:2014-06-20 13:00:23

标签: scala object module

有人问我:为什么scala提供了object个关键字?

我用object回答,我们可以:

  1. 在语言级别创建单个实例
  2. 创建其他类型的新实例作为工厂
  3. 结合不同的特质
  4. 但是他说“这些是对象可以做的,但不是为什么”。

    我应该回答这个问题?

    (我刚刚阅读了一些关于object的文章,我能否回答:因为scala希望在语言级别支持module?)

1 个答案:

答案 0 :(得分:1)

object可以避免static个成员。 Scala被设计为纯面向对象语言,static不是面向对象的。 static也会让代码更难理解,因为您混合的代码在概念上并不属于一个整体。通常,分离静态成员和实例成员是个好主意。

同样object通过为您实现单例模式来减少样板,并使无用类型更少。

比较一下:

class SomeGlobalService {
   private SomeGlobalService instance = null

   private SomeGlobalService() {
     <constructor code>
   }

   public static SomeGlobalService getInstance() {
     if (instance == null) 
       instance = new SomeGlobalService
     return instance
   }

   <members>
}

SomeGlobalService.getInstance().<someMember>

object SomeGlobalService {
  <constructor code>
  <members>
}

SomeGlobalService.<someMember>

在第一个示例中,程序包被无用的类SomeGlobalService污染,您最不会直接使用它。在scala中,类型不太明显,因为它是SomeGlobalService.type