2010-12-22 76 views
0

我在Java中的工作人員類,我可以得到它被使用下面的代碼加載磁盤上的位置:jruby中的getProtectionDomain()在哪裏?

Staff.class.getProtectionDomain().getCodeSource().getLocation(); 

在JRuby的jirb會議上,我嘗試了以下內容:

Staff.getProtectionDomain() 

和(編輯)

Staff.class.getProtectionDomain() 

這兩者無法找到方法:未定義的方法`getProtectionDomain'

這個方法是否被jruby掩蓋了,如果是的話,我怎麼稱呼它?

我正在使用jruby 1.5.6。

回答

1

JRuby中,你應該使用#protection_domain() - 它存在並按照預期運行 - 而不是getProtectionDomain() - 存在但未按預期工作。

爲了完整起見,這裏是一個簡單的例子:

# use this to get the jruby-complete.jar file 
a_java_class = self.to_java.java_class 
    #=> class org.jruby.RubyObject 
a_java_class.protection_domain.code_source.location.path 
    #=> "/C:/Users/xxx/yyy/jruby-complete-9.0.4.0.jar" 


# use this to get the file path to the commons-lang3-3.4.jar 
require_relative 'java_lib/commons-lang3-3.4.jar' 
a_java_class = Java::org.apache.commons.lang3.SystemUtils.java_class 
    #=> class org.apache.commons.lang3.SystemUtils 
a_java_class.protection_domain.code_source.location.path 
    #=>"/C:/Users/xxx/yyy/zzz/java_lib/commons-lang3-3.4.jar" 

而且,看到這個其他職位與相關信息:Get JRuby jar path

0

我相信它應該是jruby中的Staff.class.getProtectionDomain()。

+1

仍然給我同樣的錯誤。 – 2010-12-29 22:16:31

+0

解決方案:1)員工應該是來自jar文件的* java類*; 2)在jruby中避免使用java方法`#getProtectionDomain()`,而是使用jruby的方法`#protection_domain()`。最後,我們將解釋爲:`Staff.java_class.protection_domain` – zipizap 2016-02-23 10:48:11

0

所以這裏有幾個問題(至少它們是我的)。

1)你不能用類似於Staff.class的常量獲得java類 - 這將返回ruby類對象。

2)一旦你有一個java實例,你只能使用getClass()方法得到它的java.lang.Class。再次調用類會爲您提供來自ruby層次結構的類對象。

x = Java::java.lang.String.new("hi") 
x.class.kind_of?(Java::java.lang.Class) # evaluates to false 
x.getClass().kind_of?(Java::java.lang.Class) # evaluates to true 

這樣的話我就必須有工作人員的一個實例(在我的問題的例子)是這樣的:

Staff.new.getClass().getProtectionDomain()