java - initialize - ¿Por qué Class.newInstance() es "malo"?
initialize class java (2)
Ryan Delucchi preguntó here en el comentario n. ° 3 a la respuesta de Tom Hawtin :
¿Por qué Class.newInstance () "evil"?
esto en respuesta a la muestra del código:
// Avoid Class.newInstance, for it is evil.
Constructor<? extends Runnable> ctor = runClass.getConstructor();
Runnable doRun = ctor.newInstance();
Entonces, ¿por qué es malvado?
La documentación de la API de Java explica por qué ( http://java.sun.com/javase/6/docs/api/java/lang/Class.html#newInstance() ):
Tenga en cuenta que este método propaga cualquier excepción lanzada por el constructor nullary, incluida una excepción marcada. El uso de este método evita de manera efectiva la comprobación de excepciones en tiempo de compilación que, de otro modo, realizaría el compilador. El método
Constructor.newInstance
evita este problema al ajustar cualquier excepción lanzada por el constructor en una (comprobada)InvocationTargetException
.
En otras palabras, puede vencer el sistema de excepciones comprobadas.
Una razón más:
Los IDE modernos le permiten encontrar usos de clase: ayuda durante la refactorización, si usted y su IDE saben qué código está usando la clase que planea cambiar.
Cuando no hace un uso explícito del constructor, sino que usa Class.newInstance (), corre el riesgo de no encontrar ese uso durante la refactorización y este problema no se manifestará cuando compile.