¿Qué significa decir que los patrones de enumeración int son constantes en tiempo de comstackción?

Esto es de Java efectiva

Los progtwigs que utilizan el patrón int enum son frágiles. Debido a que los enums son constantes en tiempo de comstackción, se comstackn en los clientes que los usan.

¿Puede alguien explicar por qué el patrón de enumeración int se llama constante de tipo comstackdo y qué se entiende por comstackdo en los clientes ?

Aquí hay un ejemplo de tal constante:

public static final int APPLE_FUJI = 0; 

Supongamos que tiene dos archivos:

 Foo.java: public class Foo { public static final int SOMETHING = 1; } Bar.java: public class Bar { public static void main(String[] args) { System.out.println(Foo.SOMETHING); } } 

Compílelos ambos, ejecute la java Bar e imprimirá 1.

Ahora cambia Foo.java para que SOMETHING sea ​​2, y recomstack solo Foo.java . Vuelva a java Bar y seguirá imprimiendo 1. El valor constante se copiará en cada fragmento de código que lo use, en lugar de solicitar el valor a Foo en el momento de la ejecución.

En la práctica, si recomstacks todo cuando cambia algo, esto no es un problema.

El valor ‘0’ en sí mismo se integrará en los archivos .class durante la comstackción. Si luego cambia ese valor, tiene que volver a comstackr todo lo que lo usa, incluido el código de cualquier cliente que use su aplicación / biblioteca.

Si no lo hace, no recibirá una advertencia, sino un comportamiento incorrecto.

Si su constante de tiempo de comstackción se usa únicamente en su código, entonces es un problema menor, asumiendo un ciclo completo de limpieza / construcción. Si su código llega a una audiencia más amplia, esto se convierte en un problema.

Intereting Posts