将Java对象绑定到ruby哈希值

时间:2011-03-17 15:09:51

标签: java ruby jruby

有没有办法在jruby应用程序中从java对象创建ruby值对象或哈希?谢谢。

2 个答案:

答案 0 :(得分:3)

我不确定这是否是您要实现的目标,但是要将Java对象转换为ruby哈希,您可以执行以下操作:

require 'java'
java_import 'YourJavaClass'

a = YourJavaClass.new
hash = {}
a.java_class.fields.each{ |var| hash[var.name] = var.value(a) }
p hash

这假设实例变量是可访问的(public)。如果不是,您可能需要使用以下内容访问它们:

a.java_class.declared_fields.each{ |var| var.accessible = true; hash[var.name] = var.value(a) }

(请注意,这次它使用declared_fields

答案 1 :(得分:2)

名称和豆类公约为我们提供了下一个具有访问者属性的机会

def java_to_hash(java_obj)
    hash = {}
    java_obj.methods.grep(/get_/).each do |accessor|

      if accessor.eql? "get_class" then
        next
      end

      #get_user_name => user_name
      method_name = accessor[4..-1]

      if java_obj.respond_to?(method_name)
        hash[method_name.to_sym] = java_obj.send(accessor.to_sym)
      end
    end
    hash
end