In your case of CarBaseRepo,
you’re using the type parameter in both consumer and producer positions:override fun save(t: T): T
This means that, if it’s marked in, the type T can not be returned from any of the functions.
This is because in means we can go from CarBaseRepo<Object> to CarBaseRepo<String>,
but if we return T from our function save, we are returning Object from save but Object is not assignable to String.