Beruflich Dokumente
Kultur Dokumente
EJEMPLO
startTime = System.nanoTime();
for (int i = 0; i < count; i++)
{
str = str.concat("core");
}
estimatedTime = System.nanoTime() - startTime;
System.out.println("concat method:" + estimatedTime);
}
str=sbuf.toString();
estimatedTime = System.nanoTime() - startTime;
System.out.println("StringBuffer:" + estimatedTime);
}
}
En lugar de esto:
Si usted entra en el hbito de usar interfaces son tipos, su programa ser mucho ms
flexible. Si decide que desea cambiar implementaciones, todos usted tiene que hacer
es cambiar el nombre de la clase en el constructor (o utilizar una esttica diferente
fbrica). Por ejemplo, la primera declaracin podra ser cambiado para leer
y todo el cdigo que rodea seguir trabajando. El cdigo de los alrededores era
desconocen el tipo antiguo de aplicacin, por lo que sera ajeno al cambio. Hay una
advertencia: si la aplicacin original ofreca algunas funciones especiales no es
requerido por el contrato general de la interfaz y el cdigo dependa de que la
funcionalidad, entonces es fundamental que la nueva implementacin proporcionar la
misma funcionalidad. Por ejemplo, si el cdigo que rodea a la primera declaracin
dependido de la poltica de la sincronizacin del vector, entonces sera incorrecto
ArrayList sustituto del vector en la declaracin. Si depende de ningn dao especial
propiedades de una aplicacin, documentan las mismas cuando se declaran la
variable.
Si bien este programa es slo un juguete, la tcnica que demuestra es muy potente. El
programa de juguete puede ser fcilmente convertido en un probador conjunto
genrico que valida la implementacin conjunto especificado mediante la manipulacin
de uno o ms agresiva instancias y la comprobacin de que obedecen el contrato Set.
Del mismo modo, podra ser convertido en una herramienta de anlisis de rendimiento
conjunto genrico. De hecho, la tcnica es suficientemente poderosa para poner en
prctica un marco proveedor de servicios en toda regla (artculo 1). La mayora de las
veces, esta tcnica es todo lo que necesita en el camino de la reflexin. Este ejemplo
demuestra dos desventajas de la reflexin. En primer lugar, el ejemplo puede generar
tres errores de ejecucin, todos los cuales habran sido en tiempo de compilacin
errores si no se utiliza la instanciacin de reflexin. En segundo lugar, se necesita
veinte lneas de cdigo tedioso para generar una instancia de la clase de su nombre,
mientras que un constructor invocacin encajara perfectamente en una sola lnea.
Estas desventajas son, sin embargo, restringida a la parte del programa que crea una
instancia del objeto. Una vez instancia, es indistinguible de cualquier otra instancia
asignadas. En un programa real, la gran mayora del cdigo es por lo tanto no
afectada por este uso limitado de la reflexin. Si intenta compilar el programa, recibir
el mensaje de error siguiente:
Esta advertencia se refiere a el uso del programa de tipos genricos, pero no indica un
problema real. Para aprender la mejor manera de suprimir la advertencia, vase el
artculo 24. Otra cuestin que merece nota tangencial es el uso de este programa de
sistema. salida. Rara vez es apropiado llamar a este mtodo, que finaliza la totalidad
VM. Es, sin embargo, adecuada para la terminacin anormal de una utilidad de lnea
de comandos. Una legtima, si es poco frecuente, el uso de la reflexin es la gestin
de las dependencias de una clase de otras clases, mtodos o campos que pueden
estar ausentes en tiempo de ejecucin. Esto puede ser til si est escribiendo un
paquete que debe ejecutarse para mltiples versiones de alguna otra paquete. La
tcnica consiste en compilar el paquete contra el entorno mnimo necesario para
soportarla, por lo general la versin ms antigua, y para acceder a cualquier nueva
clases o mtodos reflexivamente. Para que esto funcione, usted tiene que tomar su
caso accin, si no existe una nueva clase o mtodo que est intentando tener acceso
en tiempo de ejecucin. La accin apropiada podra consistir en el uso de algn medio
alternativo para lograr el mismo objetivo o usar la funcionalidad reducida. En resumen,
la reflexin es un potente instalacin que se requiere para cierta sofisticado tareas de
programacin del sistema, pero tiene muchas desventajas. Si est escribiendo un
programa que tiene que trabajar con las clases desconocidas en tiempo de
compilacin, lo que debe, si es posible, el uso de la reflexin slo para crear instancias
de objetos, y acceder a los objetos usando alguna de las interfaces o superclase que
se conoce en tiempo de compilacin.