This is a nightmare compared to everything we did before. I always liked to work in Java, but I never realized how powerful it is compared to the other stuff. We as a team are close to switching languages and starting from scratch, its so bad.
I'd love to see an example of that!
Also, there's something about the net sum of the type system where it feels like there are a lot of concepts at work and it's easy to get lots with what type something is, exactly, especially if you didn't write the code and you're just skimming it.
There are a few places where symbolic method names are used, and in pretty much every case, it is well-established prior art: +, -, *, /, etc for math operations, ! for sending actor messages (Erlang), &, | ,^ for bit operations (C and friends).
Regarding the type system ... well, the alternative is stuff like reflection and casting. Both introduce the possibility of runtime failures and make refactoring and reasoning a lot harder.
Sure, sometimes a well-placed I-assume-this-can-never-fail cast is exactly what one needs, but I'm happy that Scala gives developers another, safer option here.
Considered FreePascal or Go, maybe? Pascal doesn't have a garbage collecter, but it's not "pointers everywhere" like C, and string values are reference counted. Having done a lot of C, I really miss function pointers when working in Java. (Pascal calls them procedural types instead of func ptrs)
The next is productivity. In java, I could focus on the problem. In c/c++ it takes only minutes, until I have to think about why my code doesn't compile. That can easily take me away for hours, sometimes longer.
The most significant downside of java is for me memory consumption. It needs a lot of care and experience to get that right.
Python on the other hand is nice. Although it does not integrate with c++ as nicely as jython integrates with java.
And this very site itself is another reality distortion.