2010-01-07 63 views
4

我似乎无法找到在Jruby中使用java类的当前语法。 这link text文章列表:适用于需要java和包括java类的jruby语法

include Java 
include 'java' 
require 'java' 

为有效的选择,虽然它说的最后一个选项是预先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”的消息,因为我有一些与我的ruby类相同的java类。保留java命名空间的最佳方法是什么,所以我没有得到这些,并且如果我从不使用这两个ruby/java类,那么是否存在任何问题(除了明显的Java类先于ruby类)相同的文件?

回答

1

我喜欢

require 'java' 
java_import java.lang.System 

我认为require 'java'的选择是不是进口和仅仅是个人喜好。另一方面,由于this bug reportJRubyWiki表示java_import是优选的。

针对Java和JRuby类之间的名称冲突。为了代码可读性或为了维护目的,我建议避免使用2个不同类的相同名称,除非你打算重新打开它。

更新:你确定错误'重定义X ...'是由于您的Java和JRuby类具有相同的名称吗?我通常会得到这个错误,因为我多次使用相同的Java类(有时在不同的地方,有时我多次加载相同的文件)。

+0

嗯...没想过,我会检查出来,thx – brad 2010-01-13 16:15:56

+0

雅它似乎是冲突。当我实例化一个包含一堆java类的对象时(只有一次),我得到这个消息。我有一个红宝石“供应商”类,我还包括一个“new.my_app.Supplier”java类与include_class – brad 2010-01-13 16:29:40

1

就个人而言,我总是用require 'java'

如果您有任何命名空间冲突,我建议不包括或导入,但指定完全限定类名,如

my_instance = Java::JavaUtil::Date.new

...其中Java::是所有Java类顶层模块,JavaUtil::是该类我想,在适当的情况下完整的包名和堵塞在一起,Date是实际的类名。