Type safe heterogeneous container pattern to store lists of items
The question is, what is "unchecked cast"?
Sometimes casts are provably safe, unfortunately the proof is beyond javac's capability, which does only limited static analysis enumerated in the spec. But the programmer is smarter than javac.
In this case, I argue that these are "checked casts", and it's very appropriate to suppress the warning.
See 2 other related examples:
Heterogeneous container to store genericly typed objects in Java
Typesafe forName class loading