有没有办法在jruby应用程序中从java对象创建ruby值对象或哈希?谢谢。
答案 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