The main case for doing it (IME) is when you need to safely cast in a generic class/method. Due to type erasure, you can't cast to T but if you've been provided a Class extends T> parameter then you can use that to cast and the result will be assignable to a variable of type T.