I am not a java expert so take my suggestion FWIW. I like #6 -- having the option of throwing a checked exception or an unchecked exception. It gives the user options at what seem very little cost. Is there a cost for #6?