>>4
>1. Not possible...assertion statement...false expression as an error
So? Just say if (!expectedResult) { System.out.println(expectedResult); throw new Exception(); }
>2. complex and inefficient code
That's an interesting way of saying "I never took the time to understand how coding in Java actually works."
>3. The design of Java makes first-class functions completely unnecessary. Once again, you should actually learn how Java code works.
>4. Function within a function
Why the hell would you need that?
>5. ugly or incompatible
In what way?
>6. Must be defined within the class body
So? Where else would you need to define them? If you put them anywhere besides the class body that would just make everything all the more "complex and inefficient."
>7. enormous source files
Really? It's 2013 and file size for source code is an issue?
>8. insecure
I'll give you this one.
>9. unnecessarily verbose
You see, Java has the best IDEs of any language. Just fucking use Eclipse and you'll never have to type an import statement again. People always complain about Java's excessive boilerplate code but the truth is you almost never have to type any of it.
>10. tail recursion is not supported
Alright, you have 2 points now.
>11. need to be explicitly casted
Casting in Java is not nearly as bad as languages like Haskell. Java makes it completely straightforward.
>11. unreachable code bla bla bla
Ever heard of commenting out code?
>12. bla bla bla
Not a very significant issue
>13. most verbose
Best IDEs.
>14. dies from a NullPointerException
Not if you catch and handle the exception like a normal person. Or just say if (myObject!=null) { //do stuff }
>15. combining functionality from multiple classes
You really don't understand Java's design, do you?
>16. method names...may collide
What are you doing where you need two different interfaces with the same method names and parameters?
>17. Java's design patterns make code much more flexible/easier to change. While it requires a lot of setup, it makes it much easier to change one piece of code without consequentially affecting something unrelated.
>18. bla bla bla
Alright, you have 4 points now. It's still a fairly insignificant point, seeing how sparingly anonymous classes are actually used.
>19. blablabla
Seriously, are you really that bad at coding? Maybe if you actually planned your code out before typing it then you wouldn't have so many problems with exceptions.
>20. all methods are virtual
Most of the time methods will need to be virtual in Java anyway. What if you had to declare every method you wanted to override as virtual? And this is coming from the guy who complains about verbosity...
>21. relationships between objects become complex
Seriously, Java has the most straightforward object system. Come back when you actually learn how it works.
>22. wasted space
>2013
>Is worried about running out of memory
>wtf?
>23. a version of C++ for lesser skilled programmers
More like a version of C++ for people that want an infinitude of libraries, including bindings of C++ libraries, and access to the best IDEs around. Not to mention how fucking simple the syntax is. Also, the standards for class naming/field naming are actually ENGLISH. Unlike C++'s hsgFloatvk num3k = 4.00000. Go to church, kike.