Метод 'getClass' используется для получения типа объекта, у которого данный метод был вызван. Аналогично можно использовать литерал 'class' непосредственно с самим типом, а не объектом.
При использовании метода 'getClass' вместе с литералом 'class' будет получена информация о типе 'Class'. Рассмотрим пример:
var typeInfo = Integer.class.getClass();
В результате вызова данного метода переменная 'typeInfo' будет хранить информацию о типе 'Class'. Это связано с тем, что литерал 'class' хранит информацию типа 'Class<Integer>'. Когда происходит вызов метода 'getClass', то информация будет, соответственно, о типе 'Class', а не о типе 'Integer'. Если нужно получать информацию о типе 'Integer', то достаточно использовать только литерал 'class':
var typeInfo = Integer.class;
Помимо этого, может произойти случайное дублирование вызова 'getClass':
Integer i = 0;
var typeInfo = i.getClass().getClass();
Как и в первом примере, при первом вызове 'getClass' будет получен объект типа 'Class<Integer>'. При повторном вызове 'getClass' будет получена информация о типе 'Class', а не о типе 'Integer'. Чтобы получить информацию именно о типе 'Integer', достаточно вызвать метод один раз:
Integer i = 0;
var typeInfo = i.getClass();
Если требуется информация именно о типе 'Class', то достаточно такой конструкции:
var classType = Class.class;
Допускается использование с 'Class.class' метода 'getClass', так как результат не меняется:
var classType = Class.class.getClass();