hmm you might want to be able to return a subclass of `T` even if T is an interface? `Class#isInstance` is not symmetric to `Class#isAssignableFrom` which also works for interfaces. For instance if I pass `Comparable` as `T` it won't work even if I can cast the class into `Comparable`