Um colega meu estava mantendo um software meu que tinha a seguinte declaração:
Class <? extends RegularTimePeriod> periodClass;
Ele precisou preencher esta variável usando Class.forName:
String nomeDaClasse = ....;
periodClass = Class.forName(nomeDaClasse);
Obviamente este código precisa de um cast, mas isto provoca um warning:
periodClass = (Class <? extends RegularTimePeriod>) Class.forName(nome);
O jeito mais bobo de resolver isso é pôr um @SuppressWarnings ("unchecked") na rotina, mas isso tem cheiro de gambiarra.
Quebramos um pouco a cabeça e vimos que o correto é usar:
periodClass = Class.forName(nome).asSubclass(RegularTimePeriod.class);
que faz o cast correto.
Agora eu pergunto: isso não é complicado demais?

