This almost seems too obvious to be worth stating, but the principle is simple, and the error is made often...
If you have more than one constructor on a class, always forward from the least specific to the most specific - thus
public Foo( String param ) { this( param , DEFAULT_VALUE ); } public Foo( String param , int value ) { this( param , value , new LinkedList( ) ); } public Foo( String param , int value , List items ) { this.param = param; this.value = value; this.items = items; }I quite often come across this though:
public Foo( String param ) { this.param = param; this.value = DEFAULT_VALUE; } public Foo( String param , int value ) { this( param ); this.value = value; } public Foo( String param , int value , List items ) { this( param ); this.items = items; }See? Absolutely chock full of subtle errors and disproportionately difficult to refactor.
If this absolutely cannot be done, then at least put static make( ) methods onto the class, limit yourself to one constructor and make it private.
To have your cake and eat it too, stick to the static methods, and give them descriptive names.