"The assert statements are being used to check a precondition--something that must be true when the method is invoked".
This is perfectly true,as far as the use of assertions is considered.But there are other conditions that has to be met for an assertion to be
appropriate(Please note the
word appropriate-not valid).One of these is
"Do not use assertions to validate arguments to a public method."
Which is done in your code.This is perfectly legal,but is not an appropriate way to use assertions.
SCJP 1.4
Do not dwell in the past, do not dream of the future, concentrate the mind on the present moment.