2012-01-10 9 views

Respuesta

9

Es lo suficientemente barato como para entrar en la categoría de optimización prematura. No pierda el tiempo ni siquiera pensando o haciendo preguntas al respecto, a menos que haya perfilado su aplicación y determinado que es un problema, y ​​lo más importante: no comprometa su diseño para evitarlo.

0

No, no debería afectar el rendimiento lo suficiente como para importar.

2

Typecasting tendrá un costo porque la información del tipo de tiempo de ejecución debe verificarse para asegurarse de que el molde funcionará. Comparado con todo lo demás, dudo que esto sea significativo, pero podrías intentarlo y medirlo.

De manera más general, el encasillado es (en mi humilde opinión) un signo de que algo no está bien en el diseño. Claro, a veces no puedes evitarlo (trabajando con colecciones heredadas, por ejemplo), pero definitivamente vería si pudiera eliminarlo.

4

Según lo que quiere decir con encasillamiento. Hay un "upcasting" que no le cuesta nada y hay un "downcasting" que le cuesta mucho. La respuesta al segundo también comienza con "depende". Por lo general, evito downcasting en mi código porque, desde mi experiencia, si se usa en exceso en el código, significa que el diseño es malo. Lo cual, por otro lado, no necesariamente significa que no debe usarse en absoluto.

+2

+1: Si bien puede costar un poco en términos de rendimiento, un buen diseño es la razón más importante para evitarlo. ;) –

4

JavaWorld: The cost of casting

casting se utiliza para convertir entre tipos - entre los tipos de referencia en particular, para el tipo de fundición operación en la que estamos interesados ​​ aquí.

upCast operaciones (también llamados conversiones de ampliación de la especificación del lenguaje Java ) convertir una referencia subclase a una referencia de clase ancestro . Esta operación de fundición es normalmente automática, ya que es siempre segura y puede ser implementada directamente por el compilador.

Downcast operaciones (también llamados conversiones de restricción en el Java Language Specification) convertir una referencia de clase ancestro a una subclase referencia. Esta operación de conversión crea una sobrecarga de ejecución, ya que Java requiere que el molde se compruebe en el tiempo de ejecución para asegurarse de que sea válido. Si el objeto referenciado no es una instancia de sea el tipo de destino para el yeso o una subclase de ese tipo, el intento de yeso no se permite y debe lanzar una java.lang.ClassCastException .

Cuestiones relacionadas