>>14
I hope you learned something by reading this post. Valid criticisms would have included but are not limited to: Anonymous classes, checked exceptions, type-erasure, swing bloat, jvm load time and footprint and unpredictable garbage collection. Try again soon!
Squee, I get to destroy your post now. You actually got away with some perfectly accurate anus-haxing on
>>11-chan's post, but you're still more of a flaming retarded faggot than she is. Here's why:
java doesn't force design patterns aside from OOP
You don't know what a design pattern is because you aren't properly indoctrinated into
ENTERPRISE culture. Java design patterns in particular are mostly inherited from C++'s design mistakes, and the ways in which people work around them (like creating and instantiating an entire class to get fake first-order functions). I'll forward you to the Wikipedia article so you can read up on this shit, keeping in mind that most of these formalisms can be invoked in other languages with a couple bits of punctuation:
http://en.wikipedia.org/wiki/Design_Patterns_(book)
This part is crucial, so read this paragraph, amabo te. Most of the shittiness in Java can be worked around by writing enough code. In large projects you typically have to work around over 9000 design failures in order to implement your program's conceptual design, to the point that you're copying the exact same code out of the GoF book every time you need to take a shit or drink a cup of coffee.
1 People claiming that
hello world is verbose in Java are missing the point, even if it's true. The real verbosity comes from relying on GoF design patterns to implement features that should already be there. This is the same thing that makes C and C++ (and assembler) verbose for writing normal applications, when you get down to it.
brain-dead auto-boxing/unboxing behavior: Works fine for me. Being able to just write <int> would be welcome code sugar, but <Integer> unboxes to int so it avoids any annoying boilerplate.
Autoboxing interacts with type erasure in subtle and extremely retarded ways. You yourself complained about type erasure, but what you probably didn't realize is that some of the problems with type erasure are actually problems with autoboxing. I have nothing more to say on this subject.
The "broken static type system" has two usual complaints: Polymorphism fuckups (which you're familiar with) and lack of type inference (which is just annoying). Both contribute to make the language unnecessarily verbose.
Are you sensing a theme yet? YOU WILL.
horrific libraries: lol good luck finding a language with better standard libraries, java has some of the best.
And some of the worst. I can't cite any specific examples because all the ones I know about were generated from an APIFactory, which was generated by an APIFactoryFactory, which was generated by Michael Jackson.
equals() for string comparison: Makes perfect sense. All objects use equals, String is an object. There would be a shitstorm if string was the only object to overload ==.
The default implementation of
equals() could be nicer. It could also be an operator, if the Java designers hadn't irrationally glued themselves to C's operator vocabulary. But let's fight about operator overloading another time. Mainly, it's just a pain not to have a more generic, OOP-friendly comparison scheme.
lack of multiple inheritance: unnecessary with interfaces
You know, I'd completely agree with you, except for one thing. What if I have a method that's defined completely in terms of other methods in an interface? I'd like to be able to implement that once, but in Java I have to
copy and paste the definition for every class that uses it. That's verbosity write there, sugarcheeks.
Oh, and garbage collection is not a big deal these days, because the JVM has a really nice GC. Seriously, I'm a huge fan.
--------------------
1Or take a shit in your bosss' cup of coffee.