2013-02-11 24 views
56

Tôi hiểu rằng "java" trong valvik vm khác với Java se về API và kiến ​​trúc vv Nhưng cú pháp luôn giống nhau. (Vui lòng sửa tôi nếu tôi sai)java android sẽ hỗ trợ biểu thức lambda trong java 8?

Bây giờ hỗ trợ của lambda expression in java 8 sắp được phát hành, android android có theo dõi không? đã làm google hay hứa hẹn về việc làm cho dalvik phù hợp với java se?

CẬP NHẬT: Bây giờ như trong Android 4.4 Kit Kat (API 19), cú pháp Java 7 đã được hỗ trợ CHÍNH THỨC. Source from android.com

+0

Caveat. Tôi không biết - nhưng VM có cần thay đổi không? Như tôi đã hiểu, lambdas chỉ được biết đến với trình biên dịch. Dưới bìa, nó chỉ là một cách để thể hiện một phương pháp vô danh - Tôi nghĩ ... Hãy thử này - http://www.lambdafaq.org/ Sự thay đổi lớn là thêm hỗ trợ cho tất cả các generics. – Simon

+16

Tại sao mọi câu hỏi tôi thấy thú vị trên SO đã bị đóng? Có một số loại cạnh tranh kì lạ để đóng số lượng câu hỏi tối đa không? –

+1

@RossJudson - Vấn đề là hầu hết các câu hỏi "thú vị" là những câu hỏi mà không có câu trả lời khách quan thực sự. Mục đích của SO là cung cấp các câu trả lời khách quan ... chứ không phải để "tranh luận, tranh luận, bỏ phiếu hoặc thảo luận mở rộng" *. Và không, không có sự cạnh tranh. Và không ... bỏ phiếu cho những câu hỏi gần gũi không làm tăng danh tiếng của bạn. –

Trả lời

32

Android không sử dụng các phiên bản Java SE của Oracle, it's based on parts of the Apache Harmony project vì vậy nó thậm chí không hỗ trợ Java 7. Harmony không tích cực phát triển nữa và sẽ không hỗ trợ 1.7. Trừ khi Google quyết định nâng cấp Harmony và SDK Android lên phiên bản Java mới hơn, sẽ không có bất kỳ tính năng Java 7 hoặc Java 8 nào trong Android - ngay cả khi các tính năng mới chỉ là cú pháp. Họ có thể sử dụng triển khai thay thế như OpenJDK, mặc dù tôi không biết bất kỳ kế hoạch nào cho việc này. Một số người nghĩ rằng việc sử dụng OpenJDK là không thể vì các vụ kiện giữa Google và Oracle.


Some features of Java 7, nhất đáng chú ý: nhà khai thác kim cương, đa-catch, chuỗi chuyển đổi và trong Android N cũng some Java 8 features như biểu thức lambda đã được thực hiện trong Android kể từ khi câu trả lời này đã được viết. (Cảm ơn RossStefan để đề cập đến trong nhận xét).

Google phải triển khai các tính năng đó theo nỗ lực của riêng mình và có vẻ như việc chọn làm như vậy chủ yếu cho các tính năng phổ biến hơn.

+5

SDK Android gần đây đã trả về câu trả lời này không chính xác. Cú pháp Java 7 được hỗ trợ. –

+3

Một số tính năng của Java 7 hiện khả dụng. Điểm chính vẫn là viết tắt: Google không thể chỉ chuyển sang Java 8 mà không cần một số nỗ lực lớn và cần phải thực hiện các tính năng này một mình. Họ quyết định làm điều này cho các phần của Java 7 nhưng có vẻ như họ vẫn không thực sự truyền đạt bất kỳ kế hoạch hỗ trợ Java 8. Đây là một câu hỏi khác về chủ đề này với một câu trả lời tuyệt vời: http://stackoverflow.com/q/16921337/897024 – Kapep

+4

Android N đang chuyển sang OpenJDK. Gói java.util.function đã được hợp nhất vào trình chủ libcore AOSP ngay hôm nay. Điều đó bao gồm các phương thức mặc định giao diện và sử dụng các biểu thức lambda. Có một cái nhìn nhanh chóng này AOSP toolchain/jack cam kết cho thấy rằng trình biên dịch "Jack" mới thực sự có thể viết lại các biểu thức lambda: http: // bit.ly/1KUvqm6 Theo hiểu biết của tôi, mã bộ sưu tập trong Git master vẫn dựa trên OpenJDK 7. Vì vậy, chưa có dấu hiệu nào của API Stream. –