Porque é Classe.newInstance ()"evil"?

Ryan Delucchi perguntouAQUI em Comentário # 3 a {7]}a resposta de Tom Hawtin :

Porque é que é Classe?newInstance ()"evil"?

isto em resposta à amostra de código:

// Avoid Class.newInstance, for it is evil.
Constructor<? extends Runnable> ctor = runClass.getConstructor();
Runnable doRun = ctor.newInstance();
Então, porque é que é mau?

Author: Community, 2008-10-12

2 answers

A documentação da API Java explica porquê ( http://java.sun.com/javase/6/docs/api/java/lang/Class.html#newInstance()):

Note que este método propaga qualquer excepção lançada pelo construtor nulário, incluindo uma excepção verificada. O uso deste método efetivamente contorna a verificação de exceção de tempo de compilação que de outra forma seria realizada pelo compilador. O método {[[0]} evita este problema ao envolver qualquer excepção lançada pelo construtor num (verificado) InvocationTargetException.

Por outras palavras, pode derrotar o sistema de excepções verificado.
 77
Author: Chris Jester-Young, 2008-10-12 10:43:31

Mais uma razão:

Os IDE modernos permitem-lhe encontrar usos de classe-ajuda durante a refactoração, se você e o seu IDE sabem que código está a usar a classe que planeia mudar.

Quando você não faz um uso explícito do construtor, mas usa Classe.newInstance () em vez disso, você corre o risco de não encontrar esse uso durante o refactoring e este problema não se manifestará quando você compilar.

 18
Author: alexei.vidmich, 2008-10-13 03:46:53