Interesting question. Had to shoot off to the
Java Language specification to find the reason and I'm still not entirely sure I understand. See section 5.5
If S is an interface type:
.
.
.
- If T is a type that is not final (�8.1.1), then if there exists a supertype X of T, and a supertype Y of S, such that both X and Y are provably distinct parameterized types, and that the erasures of X and Y are the same, a compile-time error occurs. Otherwise, the cast is always legal at compile time (because even if T does not implement S, a subclass of T might).