2012-03-26 37 views
13

Tôi có một ứng dụng được viết bằng Scala và một số thành viên trong nhóm của tôi muốn có phiên bản Java của nó. Nó là một ứng dụng demo để sử dụng một API khác được viết bằng Scala và họ muốn có một phiên bản Java của ứng dụng để có thể sử dụng API từ Java. Tuy nhiên, các ứng dụng là hơi lớn và tôi không muốn tự rewerite trong Java (và họ không muốn học Scala). Có công cụ nào sẽ tự động tạo mã Java (có thể đọc được) từ mã Scala không?Tự động chuyển đổi mã Scala thành mã Java

+1

có lẽ các đồng nghiệp của bạn có thể cố gắng đọc các ví dụ Scala, có cơ hội tốt mà họ không cần phải "biết S cala "để có được một ý tưởng về những gì mã đang làm. – gerferra

+1

Tôi đã [viết một bằng chứng về khái niệm trong Prolog] (https://gist.github.com/jarble/d4325e5a1a700129a8db20bde0b2c410) dịch một tập con của Scala thành Java. Nó dựa trên thư viện [universal-transpiler] (https://github.com/jarble/universal-transpiler) của tôi. –

Trả lời

11

họ muốn có một phiên bản Java của ứng dụng để có thể sử dụng API từ Java

lớp Scala là có thể sử dụng từ Java (vì nó là tất cả bytecode JVM cuối cùng). Bạn có thể chỉ cần gói một lọ với các lớp học của bạn cho họ sử dụng?

+0

Tôi đã làm điều đó nhưng họ muốn nhiều hơn một chút so với API (tức là, chức năng, đòi hỏi một vài ví dụ phức tạp). – Jus12

+5

Có lẽ bạn có thể cung cấp cho họ API và một số ví dụ Java về cách sử dụng nó? – JohnnyK

+0

Tôi đoán tôi sẽ làm điều đó. Tùy chọn trình biên dịch ngược không tạo ra mã Java thực sự có thể sử dụng được. – Jus12

7

Tôi không nghĩ rằng nó có thể chuyển đổi từ scala trở lại tiêu chuẩn java kể từ Scala hiện một số thao tác mã byte cấp khá thấp. Tôi chắc chắn 90% họ làm một số thứ không thể được dịch ngược lại thành mã Java bình thường.

+1

Bất kỳ mã Scala nào về nguyên tắc có thể được viết lại thành Java (sau khi tất cả, chúng đều là Turing-complete); nó sẽ không được tốt đẹp. Và mọi bản dịch Scala-to-Java tự động có thể dẫn đến một số mã khá ghê gớm. – dhg

+2

Bạn có chắc chắn điều đó không?Tôi không tin rằng tất cả các chuỗi bytecode Java hợp lệ thực sự có thể được tạo ra bởi một số chương trình biên dịch ... –

+3

Đúng, chúng đều là Turing-complete. Tôi chỉ có nghĩa là tôi không nghĩ rằng bạn có thể sản xuất mã Java mà sẽ biên dịch thành chính xác cùng một mã byte như scala. Bạn không thể dịch trực tiếp. – JohnnyK

5

Không, không có công cụ như vậy.
Scala theo nghĩa nào đó là một bản coffescript của Java. Xem tất cả các lớp sôi nổi trong bản tin là translated đến javascript. Điều tương tự * sẽ là với scala.
Tôi không nghĩ rằng có nhiều tính năng không thể dịch sang Java theo bất kỳ cách nào, nhưng hầu hết các tính năng sẽ được dịch sang mã cực kỳ lộn xộn, ngay cả khi con người sẽ làm việc đó.

Nhưng có java to scala translators.

* không nói theo nghĩa đen về các lớp học

+0

Đã xem xét java để liên kết scala. Dường như các thành viên trong nhóm của tôi sẽ hỏi cùng một câu hỏi :) – Jus12

2

Không chắc chắn điều này có hiệu quả không, nhưng bạn có thể chạy tệp lớp thông qua trình giải mã java.

Nếu nó hoạt động ở tất cả các kết quả là ràng buộc để được xấu xí như địa ngục.

2

Bạn cần phải biên soạn lại các tập tin .class vào file nguồn java, hãy cẩn thận scala sản xuất hơn .class nhiều file

Bạn có thể sử dụng javap từ oracle bao gồm trong sdk hoặc jad decompiler

cho giải thích chi tiết đọc bài viết sau:

Link scala class to java source

Các vấn đề liên quan