As a .NET/C# developer here are the missing features that annoy me. This list in no particular order - just as thoughts come to mind:
- The Java library is too small. For common things I have to choose between 5 competing open source products because the base library is lacking in so many ways.
- This is an Object Oriented programming language right? Why in the heck do primitive types not inherit from "object"?
- Pointers
- Lambdas
- Closures
- Partial Classes and to a lesser extent partial Methods
- Real support for Generics
- Using statements and Dispose - this was a real WTF for me. You really have to explicitly close connections in try/catch blocks. Poor Java guys!
- Yield return would be nice
- Unsigned integers - again WTF? I have to use number types larger than I need for what purpose again?
- In Java you can return from final blocks of try/catch. A co-worker confused the hell out of me for hours by introducing a bug this way. This behavior should be prohibited as in C#.
I rarely have to use Java and when I do, I have all sorts of WTF moments.
Edit: I Removed for-each comment based on the fact it is no longer a missing Java feature since 1.5.