2013-05-07 8 views
59

Jestem nowy, Scala zaczął uczyć się języka dla zabawy i wciąż staram się o tym myśleć. Moje rozumienie cech Scala polega na tym, że są one podobne do interfejsów Java, ale niektóre metody mogą mieć implementację.Jakie są różnice i similarties między cechami Scala a interfejsem Java 8?

Java 8 dodaje interfejsy, które mogą mieć domyślne metody, w których można zapewnić implementację.

Jakie są podobieństwa i różnice między interfejsami Java 8 a cechami Scala?

+4

sprawdź tę stronę, może to pomóc http://www.infoq.com/articles/java-8-vs-scala – CRazyProgrammer

+3

tl; dr: ** Głównym motywatorem dla metod rozszerzania wirtualnego [domyślne metody] jest Ewolucja interfejsu API. Pozytywnym efektem ubocznym jest to, że oferują one formę wielokrotnego dziedziczenia, która ogranicza się do zachowania. Cechy w Scali nie tylko zapewniają wielokrotne dziedziczenie zachowań, ale także stanu. Oprócz dziedziczenia stanów i zachowań, cechy umożliwiają uzyskanie odniesienia do klasy implementacji ... Cechy [Scala] oferują bogatszy zestaw funkcji niż metody rozszerzania wirtualnego [Java 8]. ** –

Odpowiedz

32

Motywacje dla Java 8' metod domyślnych i Scala cech różnią.

Pierwsza została wprowadzona w celu wspierania bezpiecznej ewolucji API i ograniczonej formy dziedziczenia wielokrotnego. Wykorzystując idiomy programowania funkcjonalnego w Project Lambda, korzystne było dodanie na przykład interfejsu o nazwie do java.util.Collection bez zmieniania wszystkich możliwych implementatorów (co w rzeczywistości nie jest możliwe bez łamania wstecznej zgodności). Jako efekt uboczny to także ofiarowało formę mixin composition.

Cechy Scala zostały zaprojektowane od podstaw jako klocki do komponowania komponentów modułowych. Są one przyjazne wielu dziedziczeniom i nie mają wartości diamond problem dzięki ścisłym regułom kolejności oceny miksów z powodu linearyzacji. Wspierają również państwo, mogą odwoływać się do klasy wykonawczej i nakładać ograniczenia na typ, który można łączyć. Zobacz bibliotekę kolekcji Scala, w której cechy są dokładnie używane.

9

Należy pamiętać, że z scala 2.12.0 RC1 (Sept. 2016), Trait kompiluje się teraz do interfejsu.
Scala 2,12 przede wszystkim o optymalne wykorzystanie nowych funkcji Java 8 za

Z Java 8 pozwalając konkretnych metod w interfejsach, Scala 2.12 jest w stanie skompilować cechę do jednego interfejsu.

Przedtem cecha była reprezentowana jako klasa przechowująca implementacje metod i interfejs.
Należy zauważyć, że kompilator nadal ma sporo magii do wykonania za kulisami, więc należy zachować ostrożność, jeśli cecha ma być zaimplementowana w Javie.
(Krótko mówiąc, jeśli jakaś cecha spełnia którekolwiek z poniższych kryteriów, jej podklasy wymagają kodu syntetycznego: definiowanie pól, wywoływanie super, instrukcji inicjalizujących w treści, rozszerzanie klasy, poleganie na linearyzacji w celu znalezienia implementacji we właściwej super-ciele.)

Zobacz scala PR 5003 więcej różnic w implementacji.

Powiązane problemy