使用JRuby 1.6.0RC1的JRuby +没有公共构造
我有一个像
package com.foo.bar
public class Foo
{
Foo(String baz){}
}
如果在JRuby中,我做
com.foo.bar.Foo.new "foo"
然后我得到
的Java文件TypeError: no public constructors for Java::ComFooBar::Foo
阅读http://jira.codehaus.org/browse/JRUBY-5009让我这是WAD的事情,但我如何解决这个问题而不改变java文件?
子类的Foo然后实例我得到一个不同的错误:
ArgumentError: Constructor invocation failed: tried to access method com.foo.bar.Foo.(Ljava/lang/String;)V from class 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
这远非一个完整的解决方案,但它是最接近我,所以我会接受它的人的。 – yxhuvud 2011-02-07 11:49:04