2013-02-11 31 views
56

Rozumiem, że "java" w dalvik vm różni się od języka Java pod względem API i architektury itp. Jednak składnia zawsze była taka sama. (Proszę mnie poprawić, jeśli się mylę)Czy w java 8 będzie obsługiwane wyrażenie lambda w systemie Android?

Teraz zostanie udostępnione wsparcie dla lambda expression in java 8, czy będzie ono zgodne z Androidem? czy Google lub Aos obiecał, że dalvik stanie się spójny z java se?

AKTUALIZACJA: Tak jak w Androidzie 4.4 Kit Kat (API 19), składnia Java 7 została OFICJALNIE obsługiwana. Source from android.com

+0

Zastrzeżenie. Nie wiem - ale czy VM musiałaby się zmienić? Jak rozumiem, lambdy są znane tylko kompilatorowi. Pod okładkami to tylko sposób na wyrażenie anonimowej metody - myślę ... Wypróbuj to - http://www.lambdafaq.org/ Dużą zmianą jest dodanie wsparcia dla wszystkich rodzajów. – Simon

+16

Dlaczego prawie każde pytanie, które jest dla mnie interesujące, zostało zamknięte? Czy istnieje jakaś dziwaczna konkurencja, aby zamknąć maksymalną liczbę pytań? –

+1

@RossJudson - Problem polega na tym, że większość "interesujących" pytań to te, na które nie ma prawdziwej obiektywnej odpowiedzi. Celem SO jest dostarczenie obiektywnych odpowiedzi ... zamiast * "zabiegać o debatę, argumenty, głosowanie lub rozszerzoną dyskusję" *. I nie, nie ma konkurencji. I nie ... głosowanie na zamykanie pytań nie zwiększa twojej reputacji. –

Odpowiedz

32

Android nie korzysta z wersji Java SE firmy Oracle, it's based on parts of the Apache Harmony project, więc nie obsługuje nawet języka Java 7. Harmonia nie jest już aktywnie rozwijana i nie obsługuje wersji 1.7.

O ile Google nie zdecyduje się na uaktualnienie Harmony i pakietu Android SDK do nowszej wersji Java, nie będzie żadnych funkcji Java 7 ani Java 8 w systemie Android - nawet jeśli nowe funkcje są po prostu syntaktyczne. Mogliby użyć alternatywnej implementacji, takiej jak OpenJDK, ale nie mam żadnych planów na ten temat. Niektórzy uważają, że korzystanie z OpenJDK jest mało prawdopodobne z powodu procesów sądowych między Google i Oracle.


Some features of Java 7, najbardziej zauważalną: operatorzy diamentowe, multi-catch, ciąg i przełącznik w Android N jak również some Java 8 features wyrażenia lambda zostały wdrożone w Androidzie ponieważ ta odpowiedź została napisana. (Podziękowania dla Ross i Stefan za wzmiankę o nim w komentarzach).

Google musi wdrożyć te funkcje własnymi siłami i wygląda na to, że zdecydują się to zrobić głównie w celu uzyskania bardziej popularnych funkcji.

+5

Niedawne pakiety SDK systemu Android spowodowały, że ta odpowiedź jest nieprawidłowa. Składnia Java 7 jest obsługiwana. –

+3

Niektóre funkcje Java 7 są już dostępne. Najważniejsze jest to, że Google nie może po prostu przejść na Javę 8 bez wielkiego wysiłku i musi samodzielnie wdrożyć te funkcje. Postanowili zrobić to dla części Javy 7, ale wygląda na to, że nadal nie przekazują żadnych planów dotyczących obsługi języka Java 8. Oto inne pytanie na ten temat z doskonałą odpowiedzią: http://stackoverflow.com/q/16921337/897024 – Kapep

+4

Android N przechodzi na OpenJDK. Pakiet java.util.function został dzisiaj połączony z masterem libcore AOSP. Obejmuje to domyślne metody interfejsu i użycie wyrażeń lambda. Szybkie spojrzenie na to zatwierdzenie toolchain/jack AOSP sugeruje, że nowy kompilator "Jack" może w rzeczywistości przepisać wyrażenia lambda: http: // bit.ly/1KUvqm6 Według mojej wiedzy, kod kolekcji w Git-Master jest nadal oparty na OpenJDK 7. A więc nie ma jeszcze śladów API Stream. –