Câu hỏi Giới hạn JRuby khi làm việc với các lớp Java


Theo như tôi hiểu JRuby, hoàn toàn có thể sử dụng lớp Java bên trong mã JRuby và ngược lại, tuy nhiên, tôi vẫn không hiểu vài điều.

  • JRuby có thể làm việc với chú thích Java không?
  • có thể sử dụng sự phản chiếu từ JRuby trên lớp Java không?
  • sao có thể sử dụng sự phản chiếu từ Java trên lớp JRuby?
  • thế nào để tôi có các lớp thực thi trong JRuby?
  • có thể định nghĩa lại lớp Java bên trong kịch bản JRuby không? (theo cách tương tự như tôi có thể xác định lại ví dụ: Integer in C Ruby)
  • có bất kỳ hạn chế nào khác, ngăn chặn việc sử dụng JRuby như một phần của bất kỳ ứng dụng Java nào không?

7
2017-10-19 15:10


gốc




Các câu trả lời:


  • JRuby có thể làm việc với chú thích Java không?

Không. Ruby không có chú thích. Các ruby2java trình biên dịch sẽ cho phép bạn thêm chú thích được sử dụng khi biên dịch thành tệp lớp.

  • có thể sử dụng sự phản chiếu từ JRuby trên lớp Java không?

Vâng:

java.util.Vector.methods.include? '[]'  #  => true
  • sao có thể sử dụng sự phản chiếu từ Java trên lớp JRuby?

Khi nhúng JRuby bằng BSF hoặc JSR223? Chỉ trong phạm vi những công nghệ đó cho phép nó. Khi sử dụng ruby2java? Vâng. Nó tạo ra các tệp .class bình thường của Java.

  • thế nào để tôi có các lớp thực thi trong JRuby?

Tôi không chắc chắn những gì bạn đang yêu cầu.

  • có thể định nghĩa lại lớp Java bên trong kịch bản JRuby không? (theo cách tương tự như tôi có thể xác định lại ví dụ: Integer in C Ruby)

Có, bạn có thể khỉ vá trong JRuby, nhưng những thay đổi không thể nhìn thấy từ phía Java, chỉ cần JRuby:

import java.util.Vector
class Vector
  def foo
    "foo!"
  end
end
v = java.util.Vector.new
v.foo                       #  => "foo!"
  • có bất kỳ hạn chế nào khác, ngăn chặn việc sử dụng JRuby như một phần của bất kỳ ứng dụng Java nào không?

Nhiều ít gotchas rất nhiều khi sử dụng Java từ JRuby. ruby2java vẫn còn trong giai đoạn trứng nước, và tôi không chắc nó đã sẵn sàng cho một môi trường sản xuất chưa. Ngoài ra, trọng tâm đã được nhiều hơn về kịch bản với BSF và JSR223, có thể hoặc có thể không phù hợp với mục đích của bạn.


9
2017-10-19 16:27



các lớp thực thi có nghĩa là định nghĩa lớp là mã thực thi, ví dụ: yehudakatz.com/2009/06/04/… hoặc là split-s.blogspot.com/2005/12/… - Jakub Arnold
Trong trường hợp đó, có, các lớp JRuby giống hệt các lớp của Ruby. - Pesto
Cần lưu ý rằng Chú thích được hỗ trợ với java_annotation 'TheAnnotation' gọi điện - Bo Jeanes


JRuby 1.4 có chứa một số hỗ trợ cho chú thích trên các lớp Ruby, nhưng chỉ khi chạy. Nhìn vào http://github.com/nicksieger/ruby-jersey cho một ví dụ về việc sử dụng thế hệ lớp thời gian chạy mới để tương tác với các khung công tác chú thích.

Phần còn lại của câu trả lời của Pesto là khá nhiều.


4
2017-10-26 00:57





JRuby hiện hỗ trợ Chú thích qua java_annotation nhưng nó có một số hạn chế. Một trong những nghiêm trọng trong kinh nghiệm của tôi cho đến nay là nó đòi hỏi phải sử dụng become_java! (không có giấy tờ). Điều này ngăn cản bạn sử dụng Chú thích trên các lớp Ruby đã được phân lớp từ các lớp siêu lớp Java do vấn đề 2359.

Điều này khá là có vấn đề trong lập trình web, nơi mà nhiều khung công tác sử dụng chú thích cho hệ thống định tuyến của chúng. Nó có nghĩa là bạn không thể tạo các lớp cha cho các bộ điều khiển.


1
2018-04-14 21:11