2011-12-08 33 views
7

Nếu tôi muốn dự án Scala của tôi "tương thích" với Java, điều đó làm cho nó thực tế để gọi API Scala từ mã Java (để các lập trình viên không phải Scala cũng có thể đóng góp), có thể sử dụng Project Lombok trong mã Java? Hay hai người họ không hòa hợp với nhau?Dự án Lombok có hoạt động tốt với Scala không?

Tôi sẽ phát triển trong Eclipse với IDE Scala.

EDIT: Điều tôi thực sự muốn nói là: trình soạn thảo Scala trong Eclipse có thấy mã được tạo bởi Lombok hay chỉ mã Java mà tôi thực sự nhập không?

+1

Liên quan đến việc chỉnh sửa và thiếu kiến ​​thức hoàn chỉnh về Eclipse - những gì sẽ làm việc rõ ràng là khi bạn đang sử dụng mã Java biên dịch của mình làm thư viện. Vì vậy, câu hỏi của bạn chỉ là thú vị cho các dự án hỗn hợp, không trộn thư viện. – ziggystar

Trả lời

9

Tôi không chắc chắn những gì bạn đang yêu cầu, vì Scala và Java đang hoạt động liên kết ở cấp độ bytecode, nó không quan tâm đến mã byte đến từ đâu. Vì vậy, tôi tin rằng mã Java của bạn sử dụng chú thích Lombok vẫn có thể được gọi từ chương trình Scala.

Và nếu bạn đang hỏi nếu những chú thích Lombok cung cấp có thể được sử dụng trong mã Scala, tôi thấy không có điểm, bởi vì hầu hết các tính năng được cung cấp bởi Scala itsef. Ví dụ, một lớp học với @Data có thể là case class trong Scala.

case class Data(name: String, value: Int) 

Và bạn có thể truy cập nó bằng mã Java giống như một lớp bình thường.

Data d1 = new Data("someData", 1); // Using constructor 
Data d2 = Data.apply("someData", 1); // Or using factory 

Data sẽ có tất cả tuyệt vời toString, equals, hashcode .... vv.

+0

+1 Tôi đã không nghĩ về nó theo cách này, nhưng nó trả lời một nửa câu hỏi của tôi. Tôi sẽ chỉ định những gì tôi muốn bằng cách chỉnh sửa câu hỏi. –

+0

Thực ra, tôi nên tự nghĩ về điều đó trước khi hỏi. Câu hỏi tệ. –

9

Phần trình chỉnh sửa scala sẽ 'thấy' mã được tạo tốt.

Hầu hết những gì lombok làm theo một số thông số kỹ thuật hoặc khác, giống như scala. Trường hợp lombok deviates là canEqual và equals triển khai, trong đó tình cờ là chính xác cùng một điều scala tạo ra cho trường hợp lớp IIRC, do đó, ngay cả đó là tương thích :)

DISCLAIMER: Tôi là người đóng góp chính cho dự án lombok.

+0

Hmm, tôi hiện đang gặp sự cố với mã thử nghiệm scala của tôi không tìm thấy hàm tạo của tôi được tạo bởi @RequiredArgsConstructor. Tự hỏi nếu đó là một vấn đề trong thiết lập của tôi hoặc một lỗi. – eduardohl

+1

Chỉ cần giải quyết nó, đó là một vấn đề với Eclipse biên dịch mã Scala trước mã Java, để thay đổi nó: Tuỳ chọn >> Scala >> Trình biên dịch >> Tab BuildManager >> Thay đổi compileOrder từ Mixed thành JavaThenScala – eduardohl

+0

@rzwitserloot Trong trường hợp Scala case các lớp học có chú thích '@ Data' trên chúng, bạn có nên sử dụng Javac qua Eclipsec để biên dịch mã như vậy không? –

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