So what do we need Java classes for in a JRuby/Ruby.Net environment?
Things that we have to new because that defines system services in an unambiguous fashion — I'm thinking encodings for I/O and GUI components here, as well as libraries already written that we don't want to port just yet (my algorithms library); and interfaces/abstract classes we want to make concrete (needing to be an ActionListener or similar).
Concrete things are easy; abstractions are trickier, but not impossible.
//C# code to generate a Ruby class type
public static Ruby.Class getThing()
{
object o = new java.awt.Panel();
return Ruby.Class.CLASS_OF(o);
}##Ruby code to use it thing = JsharpToRuby::ClassDictionary.getThing puts thing.to_s puts thing.ancestors panel = thing.new puts panel.to_s
which generates
Panel Container Component Serializable MenuContainer ImageObserver Object Object Kernel java.awt.Panel[panel1,0,0,0x0,invalid,layout=java.awt.FlowLayout]
which goes … java.lang.Object, Ruby Object, …
So now try
io = nil
thing.ancestors.each { |x| io = x if x.to_s.eql? "ImageObserver" }
MyImageObserver = io
class Observer
include MyImageObserver
def imageUpdate(img, infoflags, x, y, width, height)
nil
end
end
q = Observer.new
puts q.class.ancestors
to get
Observer ImageObserver Object Kernel
which means the task is not immediately insuperable; but may need some hand-rolling of concrete classes for some of the interesting interfaces, rather than being something that can be totally read-only…


No comments:
Post a Comment