Объекты

В Scala ключевое слово object создает одноэлементный объект (singleton). Другими словами, объект определяет класс, который имеет ровно один экземпляр. Он инициализируется лениво, когда ссылаются на его элементы, аналогично lazy val. Объекты в Scala позволяют группировать методы и поля в одном пространстве имен, аналогично тому, как используются статические члены класса в Java, Javascript (ES6) или @staticmethod в Python.

Объекты имеют несколько применений:

Объявление объекта аналогично объявлению класса. Вот пример объекта StringUtils, который содержит набор методов для работы со строками:

object StringUtils:
  def truncate(s: String, length: Int): String = s.take(length)
  def containsWhitespace(s: String): Boolean = s.matches(".*\\s.*")
  def isNullOrEmpty(s: String): Boolean = s == null || s.trim.isEmpty

Поскольку StringUtils является одноэлементным, его методы могут вызываться непосредственно в объекте:

StringUtils.truncate("Chuck Bartowski", 5)
// res0: String = "Chuck"

Импорт в Scala очень гибкий и позволяет импортировать все члены объекта:

import StringUtils.*
truncate("Chuck Bartowski", 5)
// res1: String = "Chuck"
containsWhitespace("Sarah Walker")
// res2: Boolean = true
isNullOrEmpty("John Casey")
// res3: Boolean = false

Можно импортировать только часть методов:

import StringUtils.{truncate, containsWhitespace}
truncate("Charles Carmichael", 7)    
containsWhitespace("Captain Awesome") 
isNullOrEmpty("Morgan Grimes")  // Not found: isNullOrEmpty (error)

Объекты также могут иметь поля, к которым можно обратиться, как к статистическим методам:

object MathConstants:
  val PI = 3.14159
  val E = 2.71828
println(MathConstants.PI)
// 3.14159

Ссылки: