【问题标题】:JRuby limitations when working with Java Classes使用 Java 类时 JRuby 的限制
【发布时间】:2016-04-15 05:11:33
【问题描述】:

就我对 JRuby 的理解,完全可以在 JRuby 代码中使用 Java 类,反之亦然,但是,我还是不明白。

  • JRuby 可以与 Java 注释一起使用吗?
  • 是否可以在 Java 类上使用 JRuby 的反射?
  • 是否可以在 JRuby 类上使用来自 Java 的反射?
  • 我在 JRuby 中有可执行的类吗?
  • 是否可以在 JRuby 脚本中重新定义 Java 类? (与我重新定义的方式相同,例如 C Ruby 中的整数)
  • 是否有任何其他限制阻止将 JRuby 用作任何 Java 应用程序的一部分?

【问题讨论】:

    标签: java ruby jruby


    【解决方案1】:
    • JRuby 可以与 Java 注释一起使用吗?

    没有。 Ruby 没有注释。不过,ruby2java 编译器将允许您添加在编译到类文件时使用的注释。

    • 是否可以在 Java 类上使用 JRuby 的反射?

    是的:

    java.util.Vector.methods.include? '[]'  #  => true
    
    • 是否可以在 JRuby 类上使用来自 Java 的反射?

    当使用 BSF 或 JSR223 嵌入 JRuby 时?仅在这些技术允许的范围内。使用 ruby​​2java 时?是的。它会生成普通的 Java .class 文件。

    • 我在 JRuby 中有可执行的类吗?

    我不确定你在问什么。

    • 是否可以在 JRuby 脚本中重新定义 Java 类? (与我重新定义的方式相同,例如 C Ruby 中的整数)

    是的,您可以在 JRuby 中修改补丁,但是从 Java 端看不到更改,只有 JRuby:

    import java.util.Vector
    class Vector
      def foo
        "foo!"
      end
    end
    v = java.util.Vector.new
    v.foo                       #  => "foo!"
    
    • 是否有任何其他限制阻止将 JRuby 用作任何 Java 应用程序的一部分?

    在 JRuby 中使用 Java 时,little gotchas 比比皆是。 ruby2java 仍处于起步阶段,我不确定它是否已准备好用于生产环境。除此之外,重点更多的是使用 BSF 和 JSR223 编写脚本,这可能适合也可能不适合您的目的。

    【讨论】:

    【解决方案2】:

    JRuby 1.4 确实包含对 Ruby 类上的注释的一些支持,但仅限于运行时。查看http://github.com/nicksieger/ruby-jersey 以获取使用新的运行时类生成与基于注释的框架进行互操作的示例。

    Pesto 的其余答案都非常正确。

    【讨论】:

      【解决方案3】:

      JRuby 现在通过java_annotation 支持注释,但它有一些限制。到目前为止,根据我的经验,一个严重的问题是它需要使用become_java!(未记录)。由于问题 2359,这会阻止您对从 Java 超类子类化的 Ruby 类使用注解。

      这在 Web 编程中是一个很大的问题,许多框架在其路由系统中使用注解。这实际上意味着您不能为控制器创建父类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-07
        • 2011-11-10
        • 1970-01-01
        • 2011-03-10
        • 1970-01-01
        • 1970-01-01
        • 2015-09-07
        相关资源
        最近更新 更多