Привязать объекты Java к хэшам ruby - PullRequest
2 голосов
/ 17 марта 2011

Есть ли способ создать объекты значения ruby ​​или хэши из объектов java в приложении jruby? Спасибо.

Ответы [ 2 ]

3 голосов
/ 17 марта 2011

Я не уверен, что это то, чего вы пытаетесь достичь, но чтобы преобразовать объект 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)

2 голосов
/ 21 марта 2011

Соглашение об именах и бобах дает нам следующую возможность для свойств с аксессорами

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
...