Java 用于将null强制转换为类的JRuby等价物

Java 用于将null强制转换为类的JRuby等价物,java,jruby,weka,Java,Jruby,Weka,我尝试通过JRuby使用JavaWeka机器学习库。到目前为止效果很好,我只想知道一件事: 为了创建字符串属性,您可以使用与Java中的标称属性相同的构造函数,但第二个参数是转换为FastVector的null: Attribute attribute = new Attribute("name", (FastVector) null); 另请参见和 在JRuby中,如果您尝试只传递nil,例如: java_import 'weka.core.Attribute' attribute = At

我尝试通过JRuby使用JavaWeka机器学习库。到目前为止效果很好,我只想知道一件事:

为了创建字符串属性,您可以使用与Java中的标称属性相同的构造函数,但第二个参数是转换为FastVector的null:

Attribute attribute = new Attribute("name", (FastVector) null);
另请参见和

在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)
Java::JavaLang::NullPointerException:
来自weka.core.Attribute。(weka/core/Attribute.java:303)
来自weka.core.Attribute。(weka/core/Attribute.java:290)
来自java.lang.reflect.Constructor.newInstance(java/lang/reflect/Constructor.java:423)
来自RUBY。((irb):7)
来自org.jruby.RubyKernel.eval(org/jruby/RubyKernel.java:978)
来自org.jruby.RubyKernel.loop(org/jruby/RubyKernel.java:1291)
来自org.jruby.RubyKernel.catch(org/jruby/RubyKernel.java:1098)
来自org.jruby.RubyKernel.catch(org/jruby/RubyKernel.java:1098)
来自Users.pgoetze.$\u dot\u rvm.rubies.jruby\u减去\u 9\u dot\u 0\u dot\u 1\u dot\u 0.bin.irb.(/Users/pgoetze/.rvm/rubies/jruby-9.0.1.0/bin/irb:13)
来自java.lang.invoke.MethodHandle.invokeWithArguments(java/lang/invoke/MethodHandle.java:627)
有没有一种方法可以在JRuby中创建一个空向量,它可以作为第二个参数而不是
nil

如果不是,创建字符串属性的方法可能是什么

因为您应该使用反射来获取对指定其参数类型的构造函数的引用

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
    包含可能实现您试图实现的目标的内容

Java::JavaLang::NullPointerException旁边是否有堆栈跟踪?我为它添加了完整的堆栈跟踪。谢谢,使用反射并从显式构造函数创建属性很有效!但是,不能将构造函数仅用于单个字符串参数,因为创建的属性在内部由Weka作为标称属性处理。