Anatomy of an Annoyance
If only Java didn’t have covariant arrays. Or, since it does, if only the designers had used something other than arrays to carry varargs. Woulda coulda shoulda. This article shows just how hard it can be to extend an existing language without shooting yourself and your users in the ass. Runtime checked array assignment + varargs in arrays + type erasure == pain.
An interesting cascade of design decisions. It’s not clear to me why Sun was so resistant to evolving the bytecode.