


Instead of using C or C, you can just use C.The safe way here is to define such a projection of the generic type, that every concrete instantiation of that generic type would be a subtype of that projection.They come in handy when we know nothing about the type argument, but need to use them in a safe way.A type projection is a type that has been limited in certain ways in order to gain variance characteristics using use-site variance.To remember: Lambdas are contra-variant in their argument types and covariant in their return type.

Type is both a producer and consumer of T.T appears in both “in position” and “out position”.
