Использование JRuby 1.6.0RC1
У меня есть файл Java, как
package com.foo.bar
public class Foo
{
Foo(String baz){}
}
Если в jruby я делаю
com.foo.bar.Foo.new "foo"
тогда я получу
TypeError: no public constructors for Java::ComFooBar::Foo
Чтение http://jira.codehaus.org/browse/JRUBY-5009 заставляет меня думать, что это WAD, но как мне обойти проблему, не изменяя java-файл?
Создание подкласса Foo, а затем создание экземпляра Я получаю другую ошибку:
ArgumentError: Конструктор
Ошибка вызова: попытался получить доступ
метод
com.foo.bar.Foo (Ljava / языки / String;). В
из класса
org.jruby.proxy.com.foo.bar.Foo $ Proxy0
РЕДАКТИРОВАТЬ:
Получил работу через помощь от Headius на IRC. Следующие работы, но, возможно, могут быть более умными:
def package_local_constructor klass,*values
constructors = klass.java_class.declared_constructors
constructors.each do |c|
c.accessible = true
begin
return c.new_instance(*values).to_java
rescue TypeError
false
end
end
raise TypeError,"found no matching constructor for " + klass.to_s + "(" + value.class + ")"
end