This sounds reasonable, but if you chain instantiation in the constructors and you rely as dependency one on another, that means if we are talking about listeners (e.g) then we may end up acting on an object whose initialization was not completed a.k.a still null. If you look at the implementation of String, it has an elegant solution.