1
//Job.java
package br.eti.mribeiro;
public interface Job {
void teste();
}
//Teste.java
package br.eti.mribeiro;
public class Teste {
public void executaJob(Class<? extends Job> classe){
try {
Job job = classe.newInstance();
job.teste();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
#jruby_teste.rb
require File.join(File.dirname(File.expand_path(__FILE__)), 'teste_jruby.jar')
java_import 'br.eti.mribeiro.Job'
java_import 'br.eti.mribeiro.Teste'
class TesteJob
include Job
def teste
puts "123456"
end
end
Teste.new.executaJob(TesteJob.class)
我想上面的代碼是相當自我解釋,我哈瓦實現的Java接口一個Ruby類,我想通過這個類返回的Java類。但是,執行ruby代碼時,我得到以下錯誤:JRUBY - 傳遞一個Ruby類的泛型參數
java.lang.InstantiationException: org.jruby.RubyClass
at java.lang.Class.newInstance(Class.java:359)
at br.eti.mribeiro.Teste.executaJob(Teste.java:6)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.jruby.javasupport.JavaMethod.invokeDirectWithExceptionHandling(JavaMethod.java:452)
at org.jruby.javasupport.JavaMethod.invokeDirect(JavaMethod.java:313)
at org.jruby.java.invokers.InstanceMethodInvoker.call(InstanceMethodInvoker.java:45)
at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:313)
at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:163)
at teste.invokeOther18:executaJob(teste.rb)
at teste.RUBY$script(teste.rb:14)
at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:599)
at org.jruby.ir.Compiler$1.load(Compiler.java:111)
at org.jruby.Ruby.runScript(Ruby.java:822)
at org.jruby.Ruby.runScript(Ruby.java:814)
at org.jruby.Ruby.runNormally(Ruby.java:752)
at org.jruby.Ruby.runFromMain(Ruby.java:574)
at org.jruby.Main.doRunFromMain(Main.java:409)
at org.jruby.Main.internalRun(Main.java:304)
at org.jruby.Main.run(Main.java:231)
at org.jruby.Main.main(Main.java:200)
有人可以告訴我我做錯了什麼嗎?
ps:teste_jruby.jar是我用java代碼導出的jar文件。
謝謝, 卡洛斯。