Jeneriklerle ilgili bası kısıtlamalar mevcuttur. Bunlardan kısaca bahsedelim.
Tür parametreleri, türün derleme aşamasında değil çalışma zamanında belirlenmesi için kullanılır. Dolayısıyla kodun yazım aşamasında türün ne olacağını önceden kestirmek mümkün değildir. Bu nedenle tür parametresi kullanarak yeni bir nesne oluşturamazsınız:
public class GenericClass<T>
{
private T obj;
public GenericClass()
{
obj = new T(); // Bu satır hataya sebep olur
}
}Statik üyelerin sınıfların oluşmasından bağımsız olduğunu daha önce anlatmıştık. Dolayısıyla jenerik bir sınıf içindeki statik üyeler tür parametresine erişemez:
public class GenericClass<T>
{
public static createGenericClass(T param)
{
// Yukarıdaki parametre nedeniyle bu kod derlenmez
// Statik metot içinde T parametresine erişemeyiz
}
}Dizi oluşturduğunuz zaman hafızada dizinin boyutu kadar yer ayrılır. Jenerik bir türün ne olduğu önceden bilinemeyeceği için jenerik dizi oluşturamazsınız:
public class GenericClass<T>
{
public GenericClass()
{
T[] array = new T[];
// Bu satır hataya sebep olur; jenerik dizi oluşturamazsınız
}
}Kendinize özel hata sınıfları oluşturabilirsiniz. Fakat bu hata sınıfları jenerik olamaz.
public class MyException<T> extends Exception
{
}Yukarıdaki sınıf henüz derleme aşamasında hata alır; çünkü jenerik bir hata sınıfı oluşturmaya çalışıyoruz.