ジャネリクスの制約とは、文字通りジェネリクスの制約をかける機能です。
制約をかけることで、ジェネリクスは上限境界の型のサブタイプでなければならなくなります。

例を見て見ましょう

ジャネリクスに制約をかけるには、こう書きます

<T(Tが一般的) : 型>

例では、classBに対してinterface bに制約をかけているため、
2.でコンパイルエラーとなります。

Whereを使って複数制約をかける

Whereキーワードを使用することにより、複数制約をかけることができます。
例を見て見ましょう

1.classAではwhereキーワードを使用し、a,bの複数の制約を
かけているため、cのみOKです。

2.classBでは、aに制約をかけていますので、aはもちろんサブタイプであるcもOKです。
bは、コンパイルエラーになります。