我有一个名为 test.jar 的jar,其中包含以下java类:
Test.java
package test;
import java.lang.reflect.Method;
public class Test {
public static void yoyo(Object o) {
Method[] methods = o.getClass().getMethods();
for (Method method : methods) {
CanRun annos = method.getAnnotation(CanRun.class);
if (annos != null) {
try {
method.invoke(o);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
和界面 CanRun.java
package test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(value = ElementType.METHOD)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface CanRun {
}
我的ruby文件是 Main.rb
require 'java'
require 'test.jar'
java_import Java::test.Test
class Main
def run
Test.yoyo(Main.new)
end
java_annotation('CanRun')
def onHi()
puts "inside on Hi"
end
end
app = Main.new
app.run
我通过以下命令运行它: jruby Main.rb
但没有输出。
基本上,我要做的是,从Main.rb调用Test.java的yoyo()并在yoyo()中传递Main的对象。然后在Test.java中的yoyo()将分析Main的所有函数.rb有注释CanRun,如果找到它会调用它们,在我们的例子中应该调用onHi。 我检查了我在yoyo()中传递的对象不是null。我面临的问题是onHi没有被调用。
我尝试了很多东西,但没有任何帮助。
我是否在rb文件中正确使用了注释,或者请以其他方式提出建议。
答案 0 :(得分:1)
您的注释不在默认包中(也不是导入),而是:
java_annotation 'test.CanRun'
或
java_import "test.CanRun"
java_annotation :CanRun