Если вы 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
|
$ scala Welcome 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 Camera defined class Camera scala> val canon = new Camera( "Canon" , "5D mark III" ) canon : Camera = Camera @ 17403 a 7 scala> canon.shutterCount res 0 : Long = 0 scala> canon.makePicture scala> canon.shutterCount res 2 : Long = 1 |
Как вы можете видеть, я использовал «статический» метод из объекта-компаньона для обновления значения shuttercount при вызове метода makePicture на моей canon Camera.
Наконец, одноэлементный объект, который не разделяет одно и то же имя с сопутствующим классом, называется автономным объектом .
Ссылка: | Scala Snippet: Объект, сопутствующий объект и статические методы от нашего партнера JCG Артура Артса в блоге JDriven . |