Compare Java to C#. C# was originally a Java clone, but the designers liberally borrowed from everywhere, worrying about actual use cases and not purity of any sort. Today C# is at the boundary between mainstream and academic programming. (It has monads for God's sake. They don't call it monads, of course. They call it LINQ.)
Java? It added generics after C# did, and only now is it finally going to add proper closures.
Compare Java to C#. C# was originally a Java clone, but the designers liberally borrowed from everywhere, worrying about actual use cases and not purity of any sort. Today C# is at the boundary between mainstream and academic programming. (It has monads for God's sake. They don't call it monads, of course. They call it LINQ.)
Java? It added generics after C# did, and only now is it finally going to add proper closures.