Если вы Java-разработчик, переходящий на Scala, одно существенное отличие в терминологии, которое может вызвать путаницу, — это термин «объект». В Java объект всегда является экземпляром класса, созданным путем вызова конструктора.
объект
В Scala объект используется для определения одного экземпляра класса с нужными вам функциями.
На практике это означает, что вы будете использовать его:
- хранить служебные / вспомогательные методы и константы в одном месте
- иметь один неизменный экземпляр для совместного использования в системе
- реализовать шаблон проектирования Singleton для координации действий в системе
Объект может иметь те же функции, что и класс. Вы можете расширить другие классы или черты. Единственное заметное отличие состоит в том, что объект не может иметь параметров конструктора.
Сопутствующий объект
В Java могут быть случаи, когда вы хотите использовать статические методы.
В Scala вы определяете эти методы внутри «объекта-компаньона», который должен быть определен в том же исходном файле, что и класс.
Класс и объект могут обращаться к приватным методам и переменным друг друга, но вы должны делать это так, как если бы вы вызывали статический метод вне Java в Java.
Оформить заказ в этом примере:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
$ scalaWelcome to Scala version 2.11.4 (Java HotSpot(TM) Client VM, Java 1.7.0_75).Type in expressions to have them evaluated.Type :help for more information.scala> :paste// Entering paste mode (ctrl-D to finish) object Camera { def updateShutterCount(shutterCount:Long): Long = { var updatedShutter = shutterCount + 1; updatedShutter } } class Camera(brandName:String, modelName:String) { val brand = brandName; val model = modelName; var shutterCount: Long = 0; def makePicture { shutterCount = Camera.updateShutterCount(shutterCount) } }// Exiting paste mode, now interpreting.defined object Cameradefined class Camerascala> val canon = new Camera("Canon", "5D mark III")canon: Camera = Camera@17403a7scala> canon.shutterCountres0: Long = 0scala> canon.makePicturescala> canon.shutterCountres2: Long = 1 |
Как вы можете видеть, я использовал «статический» метод из объекта-компаньона для обновления значения shuttercount при вызове метода makePicture на моей canon Camera.
Наконец, одноэлементный объект, который не разделяет одно и то же имя с сопутствующим классом, называется автономным объектом .
| Ссылка: | Scala Snippet: Объект, сопутствующий объект и статические методы от нашего партнера JCG Артура Артса в блоге JDriven . |