Nick Sieger-2 wrote:
...
I'm not surprised that this works, calling the Ruby subclass from the
Ruby side. What happens if you pass that object back to Java and try
to call the setup method from there?
/Nick
...
I modified the test to include passing the instance in to the JavaClass. I also tested for null/nil. All works just as we'd hope.
Details:
public class JavaClass {
public void setup() {
util("JavaClass: setup called.");
}
public void util(String s) {
System.out.println(s);
}
public void callSetup() {
this.setup();
}
public void callSetup(JavaClass ins) {
try {
ins.setup();
} catch (Exception e) {
util(e+" .. skipping");
}
}
}
public class JavaSubClass extends JavaClass {
public void setup() {
util("JavaSubClass: setup called.");
}
public static void main(String[] args) {
JavaClass jc = new JavaClass();
jc.setup();
jc.callSetup();
System.out.println("");
JavaSubClass jsc = new JavaSubClass();
jsc.setup();
jsc.callSetup();
System.out.println("");
jc.callSetup(jsc);
jsc.callSetup(jsc);
System.out.println("");
jc.callSetup(null);
jsc.callSetup(null);
}
}
...
require 'java'
include_class "JavaClass"
javaClass = JavaClass.new
javaClass.setup()
javaClass.callSetup()
class RubyClass < JavaClass
def setup()
util('RubyClass: setup called')
end
end
puts
rubyClass = RubyClass.new
rubyClass.setup()
rubyClass.callSetup()
puts
javaClass.callSetup(rubyClass)
rubyClass.callSetup(rubyClass)
puts
javaClass.callSetup(nil)
rubyClass.callSetup(nil)
...
/src/jruby[1180]: java JavaSubClass
JavaClass: setup called.
JavaClass: setup called.
JavaSubClass: setup called.
JavaSubClass: setup called.
JavaSubClass: setup called.
JavaSubClass: setup called.
java.lang.NullPointerException .. skipping
java.lang.NullPointerException .. skipping
...
owen|~/src/jruby[1181]: jruby testjava.rb
JavaClass: setup called.
JavaClass: setup called.
RubyClass: setup called
RubyClass: setup called
RubyClass: setup called
RubyClass: setup called
java.lang.NullPointerException .. skipping
java.lang.NullPointerException .. skipping