我尝试通过JRuby使用Java weka机器学习lib。它到目前为止工作正常,我只想知道一件事:
为了创建字符串属性,您可以使用与Java中名义属性相同的构造函数,但第二个参数是对FastVector的null:
Attribute attribute = new Attribute("name", (FastVector) null);
另请参阅this Stackoverflow post和weka doc for Attribute。
在JRuby中,如果您尝试仅传递nil
,例如:
java_import 'weka.core.Attribute'
attribute = Attribute.new('name', nil)
会引发Java::JavaLang::NullPointerException
错误。
完整堆栈跟踪是:
Java::JavaLang::NullPointerException:
from weka.core.Attribute.<init>(weka/core/Attribute.java:303)
from weka.core.Attribute.<init>(weka/core/Attribute.java:290)
from java.lang.reflect.Constructor.newInstance(java/lang/reflect/Constructor.java:423)
from RUBY.<eval>((irb):7)
from org.jruby.RubyKernel.eval(org/jruby/RubyKernel.java:978)
from org.jruby.RubyKernel.loop(org/jruby/RubyKernel.java:1291)
from org.jruby.RubyKernel.catch(org/jruby/RubyKernel.java:1098)
from org.jruby.RubyKernel.catch(org/jruby/RubyKernel.java:1098)
from Users.pgoetze.$_dot_rvm.rubies.jruby_minus_9_dot_0_dot_1_dot_0.bin.irb.<top>(/Users/pgoetze/.rvm/rubies/jruby-9.0.1.0/bin/irb:13)
from java.lang.invoke.MethodHandle.invokeWithArguments(java/lang/invoke/MethodHandle.java:627)
有没有办法在JRuby中创建一个空值向量,可以作为第二个参数而不是nil
传递?
如果没有,创建字符串属性的方法可能是什么?
答案 0 :(得分:2)
作为JRuby wiki states,您应该使用反射来获取对指定其参数类型的构造函数的引用。
java_import java.util.List
java_import weka.core.Attribute
#...
constructor = Attribute.java_class.declared_constructor(java.lang.String, java.util.List)
attribute = constructor.new_instance('name', nil)
注意:
weka.core.FastVector
只是ArrayList
weka.core.Attribute
包含a constructor with single String
argument,可能会实现您想要实现的目标