Simplified syntax to create instances of anonymous classes for Java event
handlers/adapters
-------------------------------------------------------------------------------------------
Key: JRUBY-3543
URL: http://jira.codehaus.org/browse/JRUBY-3543
Project: JRuby
Issue Type: Improvement
Components: Java Integration
Reporter: Steve Riegel
Priority: Minor
This would be handy for creating instances of anonymous classes for java event
handlers/adapters:
foo = JavaInterfaceOrClass.new
class << foo
def method1(x)
# override method1
end
def method2(y, z)
# override method2
end
# etc...
end
some_other_method(a, b, foo, c)
It turns out that this works for a java Interface, but not for a java Class.
For the java Class case, I have to extend (subclass) the class to define the
overrides. Unfortunately, that code ends up lexically remote from the call in
which it is used (can't define the subclass just before the some_other_method()
call), even though it is often highly related/specific to that call and other
code around it.
I happen to have a case where I actually need instances of each (a java
Interface and a java Class) to pass to some_other_method(). Yup ... two event
handlers where one is derived from a java Interface, and the other from a java
Class. Each handler also happens to require more than one method, so I can't
use the "closure conversion" (as described in "Calling Java from JRuby").
If I understand correctly, normal Ruby implements this "Object-Specific Class"
concept by creating a singleton class and inserting it into the inheritance
hierarchy (between the object and its original superclass). My guess is that
JRuby happens to wrap the correct object+class in the Interface case (because
it is actually creating the Interface object+class at the same time
(JRUBY-169)), but does not in the Class case. It appears to wrap only the
original object+superclass in the Class case. It would be neat if JRuby could
"re-wrap" to the object+singleton in the Class case (picking up the overrides).
To me, the key advantage of having this (or similar) syntax work is that it
permits highly related code to be visually colocated.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email