Hi, I've been away from the Groovy world for some years. As of recently, I've been trying to add some behavior to Groovy scripts embedded in a large Java codebase. A few things that I "half-remembered" striked me as odd. In this mail I want to ask about why Groovy does not honor certain methods for POJOs
My questions: * Why does Groovy NOT honor get/setProperty for pojos? * Why does it honor propertyMissing? I'm sure there must be good/historical reasons for this incongruency, but I haven't been able to google a good answer. And I don't think the answer will be "oh! we've never thought of that!" :-) If it were up to me, I would honor both or none... And I'm not looking for "solutions" that add those methods through a metaClass blah blah I just would like a good rationale behind the way Groovy "naturally" handles properties for POJOs thanks, bye! For reference, I created a POJO and added the following: // === a regular Java class: MyPojo.java public class MyPojo { private int myProp= 88; private int myOtherProp= 44; public int getMyProp() { return myProp; } public Object getProperty(String name) { return 555; // whatever } public Object propertyMissing(String name) { System.out.println("propertyMissing read "+name); return "hello"; } public void propertyMissing(String name, Object value) { System.out.println("propertyMissing write "+name+" val: "+value); } } // === and now from a groovy script def p= new MyPojo() assert p.myProp == 88 // called getMyProp() assert p.myOtherProp == 44 // read directly assert p.xxx == "hello" // propertMissing(String) honored! p.yyy = 2222 // prints "propertyMissing write yyy val: 222"