Technically Correct

Aside from standard cases of Java's deficiencies, extended exposure will uncover many additional flaws.

A Map's inability to be fully generic is an example recently encountered. The get() accessor will not utilize generics to type-limit the key parameter, but instead only accepts an Object. This implies that for any Map with a declared key type, it is admissible to attempt value acquisition for any type.

According to the specification this is technically correct behavior. By definition a Map will utilize strong equality to match keys, so anything provided to get() that passes an equals() check is completely valid. Yet it makes no goddamn practical sense. Compile validation on get() is far more valuable than conforming to a specification that promotes questionable practices. A fully generic get() does allow for strong key equivalency in a situation where casting is not an option, but in that case the Map should be keyed on a base type. Strong object equivalency with uncastable targets is an absolute nightmare.

Just an observation situation where Java's language design can encourage poor practices and further reinforces Java's poor reputation.