« Return to Thread: Java subclasses in Ruby

Re: Java subclasses in Ruby

by backspaces :: Rate this Message:

Reply to Author | View in Thread

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

 « Return to Thread: Java subclasses in Ruby