使用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