Subclassing using lambdas
lukaseder opened this issue · 2 comments
As originally reported by @C4Phone here: jOOQ/jOOL#331
Hi, I just found out this library and jOOR. I really like your projects. I'd like it better if you guys could achieve "subclassing" interfaces and/or abstract classes using lambdas. This would be very helpful for using Java as an interpreted language.
Expected behavior and actual behavior:
I don't know whether similar functionalities exist. But this is what I expect:
// Run this code in a jupyter notebook.
interface Counter {
// This is an interface, but it can also be an abstract class
void add();
void show();
}
org.joor.Reflect myClass = lambdaSubclass(on(Counter))
.addField("counter", Integer.class)
.setDefaultConstructor(self -> self.set("counter", 0))
.set("add", self -> self.set("counter", self.get("counter") +1)),
"show", self -> System.out.println(self.get("counter"))) // "set" is a function of variable length.
.doneSubclass();
Counter x = myClass.create();
x.add();
x.show();
x.add();
x.show();
// Should print 1 then print 2.
Is this possible or already implemented? If not, can I request this functionality and/or help implement it? Thank you!
Thanks for your suggestion. Essentially, you'd like to enhance the existing proxy implementation (which simply delegates getter and setter calls to a HashMap
) with the possibility of specifying constructor and method implementations on that proxy?
Yes. But I also worry that using these reflections too much is a bad practice and a reason to use Jython or Scala instead. So maybe people won't use this feature even if we implement it.