Обобщения работают только с объектами

Когда объявляется экземпляр обобщенного типа, аргумент, переданный в качестве параметра типа, должен быть типом класса. Вы не можете использовать примитивный тип вроде int или char. Например, Gen можно передать любой тип класса в Т, но нельзя передать примитивный тип в качестве параметра типа. Таким образом, следующее объявление недопустимо:

Gen strOb = new Gen(53) ;
// Ошибка, нельзя использовать
// примитивные типы

Конечно, невозможность использовать примитивный тип не является серьезным ограничением, так как вы можете применять оболочки типов (как это и делается в предыдущем примере) для инкапсуляции примитивных типов. Более того, механизм автоупаковки и автораспаковки Java делает использование оболочек типов прозрачным.