La importación estática es una característica introducida en el lenguaje de programación Java que permite que los miembros (campos y métodos) que han sido definidos dentro de su clase contenedora public static, se utilicen en código Java sin especificar la clase en la que se ha definido el campo. Esta característica se introdujo en el lenguaje en la versión 5.0 .
Esta característica proporciona un mecanismo de tipado seguro para incluir constantes en el código sin necesidad de hacer referencia a la clase que definió originalmente el campo. También ayuda a desaconsejar la práctica de crear una interfaz constante (una interfaz que solo define constantes y luego escribir una clase que implemente esa interfaz, lo cual se considera un uso inapropiado de las interfaces. [ 1 ] )
Este mecanismo puede utilizarse para hacer referencia a miembros individuales de una clase:
import static java.lang.Math.PI ; import static java.lang.Math.pow ;o todos los miembros estáticos de una clase:
import static java.lang.Math.* ;Por ejemplo, esta clase:
public class HelloWorld { public static void main ( String [] args ) { System . out . println ( "¡Hola Mundo!" ); System . out . println ( "Considerando un círculo con un diámetro de 5 cm, tiene " ); System . out . println ( "una circunferencia de " + ( Math . PI * 5 ) + " cm" ); System . out . println ( "y un área de " + ( Math . PI * Math . pow ( 2.5 , 2 )) + " cm²" ); } }En cambio, se puede escribir como:
import static java.lang.Math.* ; import static java.lang.System.out ;public class HelloWorld { public static void main ( String [] args ) { out . println ( "¡Hola Mundo!" ); out . println ( "Considerando un círculo con un diámetro de 5 cm, tiene " ); out . println ( "una circunferencia de " + ( PI * 5 ) + " cm" ); out . println ( "y un área de " + ( PI * pow ( 2.5 , 2 )) + " cm²" ); } }Ambigüedad
Si se importan dos miembros estáticos con el mismo nombre desde distintas clases, el compilador generará un error, ya que no podrá determinar qué miembro usar al no especificarse el nombre de la clase. Por ejemplo, el siguiente código no compilará:
import static java.lang.Integer.* ; import static java.lang.Long.* ;public class HelloWorld { public static void main ( String [] args ) { System . out . println ( MAX_VALUE ); } }En este caso, MAX_VALUEes ambiguo, ya que el MAX_VALUEcampo es un atributo tanto de java.lang.Integercomo de java.lang.Long. Anteponer al campo el nombre de su clase desambiguará la clase de la que MAX_VALUEderiva, pero hacerlo hace que el uso de una importación estática sea redundante. [ 2 ]
Notas
Referencias
- Importación estática en Java 8 (Oracle)
- Java (lenguaje de programación)