Another way of constraining a generic is to use <T : ...> syntax, where ... is some type. This limits T to being some sub-type of that type, rather than an arbitrary class.

So, here, we constrain Transport to transport a Thingy. Since Animal extends Thingy, Van can be a Transport<Animal>. But we have no way to create a Transport<String>, for example, as String does not extend from the Thingy base class.

You can learn more about this in:
Run Edit