Quite some time ago there was a lot of discussion about adding interfaces and constructors and a bunch of other Java-esque features to CF. Apart from the great comments by Jared and Sean on the fact that you don’t NEED a constructor as a language construct (the init() convention is fine), I have one more reason to not want constructors – it makes circular resolution of constructor dependencies impossible.
One of the limitations of ColdSpring is that you can’t have constructor injection of circular dependencies. The reason is (presumably) because ColdSpring follows the Init() convention and treats init() as a genuine constructor. If it treated it as a pseudo constructor (which is what it is), there wouldn’t be a problem.
In LightWire, all of the objects are instantiated (without calling the init method) and then the init method is run in each allowing for circular constructor dependencies because of the fact that init() isn’t a true constructor so I can “create” all of the dependent objects and then immediately afterwards can init() them with their dependencies before returning the requested object. Of course, I probably need to do some thinking about making this thread safe for application scoped objects, but it allows for full or lazy loading and for resolution of circular dependencies even in the “constructor” arguments which seems to me to be pretty cool.
So, please don’t add more limitations to ColdFusion. I like it just the way it is!