It becomes readable with practice. And the use of a few standardized collection types and corresponding core lib functions goes leaps and bounds towards preventing dynamic typing from being a frustration.
Definitely would be a mess if you tried to mesh too extensively with standard Java, though.