scalabook
Объекты
В Scala ключевое слово object
создает одноэлементный объект (singleton).
Другими словами, объект определяет класс, который имеет ровно один экземпляр.
Он инициализируется лениво, когда ссылаются на его элементы, аналогично lazy val
.
Объекты в Scala позволяют группировать методы и поля в одном пространстве имен,
аналогично тому, как используются статические члены класса в Java, Javascript (ES6) или @staticmethod
в Python.
Объекты имеют несколько применений:
- Они используются для создания коллекций служебных методов.
- companion object - это объект, имеющий то же имя, что и класс, с которым он совместно использует файл. В этой ситуации класс называется companion class.
- Они используются для имплементации
traits
для создания модулей.
Объявление объекта аналогично объявлению класса.
Вот пример объекта 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 = trueisNullOrEmpty("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.71828println(MathConstants.PI)// 3.14159
Ссылки: