The system also has additional goals. Goals are different from constraints. Whereas all constraints must be met, it may not be possible to meet all the goals. Goals may be traded off against each other, or may be abandoned because they contradict constraints. No priority is implied by the ordering of the goals.
Good collections support.
The core Collections APIs and similar APIs are perhaps the most important customers of genericity, so it is essential that they work well as, and with, generic classes. Elimination of needless casts and improved static typechecking. The Principle of Least Astonishment. Minimal design risk. The consequences of the design for usability, compatibility, performance and implementability must be fully understood.