Java hate is overblown, but compared to say Scala (I have professional experience with both) it makes a lot of relatively trivial things (like basic data-holding classes and operations upon them) more painful and verbose than they need to be.
There's a balance. Neither is optimal. (I think C# comes very close to what I'd call "perfect", but it doesn't run anywhere I'd want to use it.)