3.8. Klasa AnyRef
Klasa AnyRef reprezentuje wartości, które są reprezentowane jako obiekty na platformie JVM. Odpowiednikiem klasy AnyRef jest na tej platformie klasa java.lang.Object. Klasy będące podklasami java.lang.Object i zdefiniowane w języku Java są widziane w języku Scala jako klasy dziedziczące z AnyRef. Klasy zdefiniowane w języku Scala również dziedziczą (pośrednio lub bezpośrednio) z AnyRef, ale dodatkowo dziedziczą cechę scala.ScalaObject. Sama cecha scala.ScalaObject nie deklaruje żadnych składowych.
Cechy są opisane w rozdziale 6. |
Klasa AnyRef implementuje abstrakcyjne metody odziedziczone z klasy Any:
- equals,
- hashCode,
- toString.
Klasa ta dodaje dwie metody finalne związane z porównywaniem obiektów:
- final def eq(that: AnyRef): Boolean,
- final def ne(that: AnyRef): Boolean.
Metoda eq zwraca wartość true, jeśli została wywołana na tym samym obiekcie, na który wskazuje referencja that. Metoda ne zwraca wartość przeciwną do metody eq (wywołanej na tym samym obiekcie i z tym samym argumentem). Jeśli jakaś podklasa klasy AnyRef definiuje własną wersję metody equals, to ta definicja wpływa na działanie metod == i !=, zdefiniowanych w klasie Any, ale nie wpływa na działanie metod eq i ne, zdefiniowanych w AnyRef.
Ponadto w klasie AnyRef zadeklarowana jest metoda synchronized, która umożliwia synchronizację wykonania przekazanego jej argumentu. Obiekt, na którym ta metoda jest wykonywana, służy jako blokada.
Przykład wykorzystania metody synchronized znajduje się w punkcie 22.4. |