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?
2 answers
A documentação da API Java explica porquê ( http://java.sun.com/javase/6/docs/api/java/lang/Class.html#newInstance()):
Por outras palavras, pode derrotar o sistema de excepções verificado.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
.
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.