RecapDifficulty: Advanced1 min

What the Compiler Knows, and What the Runtime Forgot

Five things this topic established, and where each one was.

What the topic established, and which card it was on
The thingWhere
A type parameter moves a failure from the reading line to the writing lineMoving a Cast From the Moment It Runs
Type arguments are erased, so List<String> is a List at runtimeWhat Is Left of List<String>
A List<String> is not a List<Object>, because adding would corrupt itWhy a List<String> Is Not a List<Object>
Producer extends, consumer super — the wildcard states the directionextends and super
new T[], new T(), instanceof T and T.class are all refusedWhy You Cannot Write new T[]

The one worth carrying: every awkward rule in this topic is erasure. The compiler knows the type argument and the runtime does not, so anything needing the type while running is refused, and anything the compiler can check is checked early.