In my experience, clashes don't happen very often, and when they do (e.g. you need to use both classes, or as in the case above), you just have to explicitly qualify one class (usually the one you use least). With wildcard imports, you can add an explicit import for the clashing type you actually use (or use most often if you use both), and explicitly qualify the clashing type you use least. The compiler warns you when there's an unresolved name clash, so it's no problem.
For example, if you use java.util.Date more in the code than java.sql.date, you could do this:
import java.sql.*;
import java.util.*;
import java.util.Date; // explicitly import the class you use (or use most often) when there's a name clash.
class NoProblem {
Date d; // by default will use java.util.Date because of explicit import
java.sql.Date s; // to use java.sql.Date you need to explicitly specify its package
}
Of course, this is only needed when you're using many classes from a single package
and there's a name clash with another package, and you want to avoid a rash of unnecessary import statements. The explicit import of one class and the explicit qualification of the other make it pretty clear which is which in the code.
Most decent IDEs will have a setting where you can specify the number of separate imports from a single package at which the separate import statements will replaced by a single wildcard import. Wildcard imports are optional, but they're provided for a good reason.