A diferença aqui é que, no primeiro, especificamos que o chamador deve passar uma instância de Object (qualquer classe) e receberá outro Object (qualquer classe, não necessariamente do mesmo tipo).
No segundo, o tipo retornado será o mesmo que o fornecido quando a classe foi definida.
Example ex = new Example<Integer>();
Aqui, especificamos qual será o tipo T, o que nos permite impor mais restrições a uma classe ou método. Por exemplo, podemos instanciar um LinkedList<Integer>
ou LinkedList<Example>
e sabemos que quando chamamos um desses métodos, retornamos uma instância de Integer ou Example.
O principal objetivo aqui é que o código de chamada possa especificar em que tipo de objetos uma classe operará, em vez de depender da conversão de tipos para impor isso.
Consulte Java Generics * da Oracle.
* Link atualizado.