Having been exposed to OCaml, I'm starting to think that if you have null references, you don't really have static typing. I guess I'll have to look at guava, but it can only help so much in interacting with other code.
Java makes you type class names, and the compiler makes you cast things, as for it being a statically typed language, I'm not really sure.
As with most things java it's a lot of typing for not a lot of accomplishing anything useful, but somewhat better than C.
OCaml/F#/Scala have far better type systems that check a lot more things, and require less typing.
Sure, Java's type system isn't that awesome. But it's better than not having compile time type checks.