Правильный синтаксис jruby для требования Java и включения классов Java - PullRequest
4 голосов
/ 07 января 2010

Я не могу найти текущий синтаксис использования классов Java в Jruby. Это текст ссылки списки статей:

include Java
include 'java'
require 'java'

В качестве допустимых опций, хотя в нем говорится, что последняя опция - pre 1.0 и не работает.
Однако Jruby Wiki говорит, что нужно использовать require 'java'

И для включения классов я видел

MyClass = Java::some.package.MyClass
include_class Java::some.package.MyClass
include_class 'some.package.MyClass'
java_import Java::some.package.MyClass

Есть ли один предпочтительный метод?

В настоящее время я получаю сообщение "переопределение X", поскольку у меня есть несколько классов Java, названных так же, как мой класс ruby. Каков наилучший метод для сохранения пространства имен Java, поэтому я не получаю их, и есть ли какие-либо проблемы (кроме очевидного Java-класса, имеющего прецедент для класса ruby) с этим переопределением, если я никогда не использую два класса ruby ​​/ java тот же файл?

Ответы [ 2 ]

1 голос
/ 13 января 2010

Я предпочитаю

require 'java'
java_import java.lang.System

Я думаю, что выбор require 'java' - это не импорт, а личное предпочтение. С другой стороны, JRubyWiki говорит, что java_import предпочтительнее, поскольку этот отчет об ошибках .

Для конфликта имен между классами Java и JRuby. Для удобства чтения кода или в целях обслуживания я бы рекомендовал не использовать одно и то же имя для двух разных классов, если только вы не собираетесь его снова открывать.

Обновление : вы уверены, что ошибка «Переопределить X ...» вызвана тем, что у вашего Java и JRuby одинаковые имена? Я обычно получаю эту ошибку, потому что я java_import один и тот же класс Java несколько раз (иногда в разных местах, иногда я загружаю один и тот же файл несколько раз).

1 голос
/ 08 января 2010

Лично я всегда пользуюсь require 'java'

Если у вас конфликты пространства имен, я бы предложил не включать или импортировать, а указывать полные имена классов, например,

my_instance = Java::JavaUtil::Date.new

... где Java:: - это модуль верхнего уровня для всех классов Java, JavaUtil:: - полное имя пакета для нужного мне класса, в правильном регистре и в сочетании, а Date - фактическое имя класса .

...