2009-10-19 16 views
7

के साथ काम करते समय JRuby सीमाएं जहां तक ​​मैं JRuby को समझता हूं, जावा क्लास का उपयोग JRuby कोड के अंदर करना और इसके विपरीत, हालांकि, मुझे अभी भी कुछ चीजें समझ में नहीं आती हैं।जावा क्लासेस

  • जावा एनोटेशन के साथ जेआरबीई काम कर सकता है?
  • जावा क्लास पर जेआरबी से प्रतिबिंब का उपयोग करना संभव है?
  • क्या जावा से जेआरबी कक्षा पर प्रतिबिंब का उपयोग करना संभव है?
  • क्या मेरे पास जेआरबी में निष्पादन योग्य कक्षाएं हैं?
  • क्या जेआरबी स्क्रिप्ट के अंदर जावा क्लास को फिर से परिभाषित करना संभव है? (वैसे ही जैसे मैं फिर से परिभाषित कर सकता हूं उदाहरण के लिए। सी रूबी में पूर्णांक)
  • क्या कोई अन्य सीमाएं हैं, जो किसी भी जावा एप्लिकेशन के हिस्से के रूप में जेआरबीई का उपयोग रोकने से रोकती हैं?

उत्तर

9
  • JRuby जावा एनोटेशन के साथ काम कर सकते हैं?

नहीं रूबी में एनोटेशन नहीं हैं। ruby2java कंपाइलर आपको एनोटेशन जोड़ने की अनुमति देगा जो क्लास फ़ाइल को संकलित करते समय उपयोग किया जाता है।

  • जावा क्लास पर जेआरबी से प्रतिबिंब का उपयोग करना संभव है?

हाँ:

java.util.Vector.methods.include? '[]' # => true 
  • यह संभव है JRuby वर्ग पर जावा से प्रतिबिंब उपयोग कैसे करें?

बीएसएफ या जेएसआर 223 का उपयोग करते हुए जेआरबीबी एम्बेड करते समय? केवल इतना हद तक कि उन प्रौद्योगिकियों ने इसे अनुमति दी है। Ruby2java का उपयोग करते समय? हाँ। यह सामान्य जावा। क्लास फाइलें उत्पन्न करता है।

  • क्या मेरे पास जेआरबी में निष्पादन योग्य कक्षाएं हैं?

मुझे बिल्कुल यकीन नहीं है कि आप क्या पूछ रहे हैं।

  • क्या जेआरबी स्क्रिप्ट के अंदर जावा क्लास को फिर से परिभाषित करना संभव है? (उसी तरह के रूप में मैं जैसे को फिर से परिभाषित कर सकते हैं सी रूबी में पूर्णांक।)

हाँ, आप JRuby में बंदर पैच कर सकते हैं, लेकिन बदलाव सिर्फ JRuby, जावा की ओर से दिखाई नहीं देते हैं:

import java.util.Vector 
class Vector 
    def foo 
    "foo!" 
    end 
end 
v = java.util.Vector.new 
v.foo      # => "foo!" 
  • क्या कोई अन्य सीमाएं हैं, जो किसी भी जावा एप्लिकेशन के हिस्से के रूप में जेआरबीई का उपयोग रोकने से रोकती हैं?

JRuby से जावा का उपयोग करते समय little gotchas बहुत अधिक है। ruby2java अभी भी अपने बचपन में है, और मुझे यकीन नहीं है कि यह अभी तक उत्पादन वातावरण के लिए तैयार है। इसके अलावा, बीएसएफ और जेएसआर 223 के साथ स्क्रिप्टिंग पर ध्यान केंद्रित किया गया है, जो आपके उद्देश्यों के अनुरूप हो सकता है या नहीं।

+0

निष्पादन योग्य वर्ग का अर्थ है कि कक्षा परिभाषा निष्पादन योग्य कोड है, उदाहरण के लिए। http://yehudakatz.com/2009/06/04/the- महत्व-of-executable-class-bodies/ या http://split-s.blogspot.com/2005/12/rubys-executable-class-definitions .html –

+0

उस स्थिति में, हाँ, JRuby कक्षाएं रूबी कक्षाओं की तरह बिल्कुल हैं। – Pesto

+1

यह ध्यान दिया जाना चाहिए कि एनोटेशन 'java_annotation' Thennotation 'कॉल के साथ समर्थित हैं –

3

JRuby 1।4 में रूबी कक्षाओं पर एनोटेशन के लिए कुछ समर्थन शामिल है, लेकिन केवल रनटाइम पर। एनोटेशन-आधारित ढांचे के साथ इंटरऑप करने के लिए नई रनटाइम क्लास पीढ़ी का उपयोग करने के उदाहरण के लिए http://github.com/nicksieger/ruby-jersey देखें।

शेष पेस्टो के उत्तर काफी सही हैं।

1

जेआरबी अब के माध्यम से एनोटेशन का समर्थन करता है लेकिन इसमें कुछ सीमाएं हैं। अब तक मेरे अनुभव में एक गंभीर यह है कि इसे become_java! (जो अनियंत्रित है) का उपयोग करने की आवश्यकता है। यह आपको रूबी कक्षाओं पर एनोटेशन का उपयोग करने से रोकता है जो कि 2359 के कारण जावा सुपरक्लास से उप-वर्गीकृत थे।

यह वेब प्रोग्रामिंग में बहुत ही समस्याग्रस्त है, जहां कई ढांचे उनके रूटिंग सिस्टम के लिए एनोटेशन का उपयोग करते हैं। इसका प्रभावी अर्थ है कि आप नियंत्रकों के लिए अभिभावक कक्षाएं नहीं बना सकते हैं।

संबंधित मुद्दे