当前位置: 代码迷 >> java >> jruby注释方法没有被调用
  详细解决方案

jruby注释方法没有被调用

热度:86   发布时间:2023-07-31 11:11:36.0

我有一个名为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 {
} 

我的红宝石文件是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()并将Main对象传递给yoyo()。然后,Test.java中的yoyo()将分析Main.rb的所有功能注释CanRun,如果找到将调用它们,在我们的情况下,应调用onHi。 我检查了要在yoyo()中传递的对象是否为null。 我面临的问题是onHi没有被调用。

我尝试了很多事情,但没有任何帮助。

我在rb文件中正确使用注释还是请提出其他建议?

您的注释不在默认包中(也不导入),因此:

java_annotation 'test.CanRun'

要么

java_import "test.CanRun"
java_annotation :CanRun