#### §4.10.(e) Propagating type parameters

If a callin binding binds to a generic base method, any type parameter(s) of the base method must be propagated into the role method by declaring the callin binding with type parameters, too. By matching a type parameter of a base method with a type variable of the callin binding, this genericity is propagated through the callin binding.

1

    class MyBase {

2

    	<T> T getIt(T it) { return it; }

3

    }

4

    team class MyTeam {

5

    	protected class MyRole playedBy MyBase {

6

    		callin <U> U rm(U a) { return base.rm(a); }

7

    		<U> U rm(U a) <- replace U getIt(U it);

8

    	}

9

    }

##### Explanation:

The callin binding declares a type parameter `<U>` which is used to match all occurrences of `T` in the signature of `getIt`. Thus the implementation of `rm` uses the type `U` in exactly the same generic way as `getIt` uses `T`.