java modifier static-import

java - ¿Qué significa el modificador "estático" después de "importar"?



modifier static-import (8)

Cuando se usa así:

import static com.showboy.Myclass; public class Anotherclass{}

¿ import static com.showboy.Myclass es la diferencia entre import static com.showboy.Myclass e import com.showboy.Myclass ?


¿La diferencia entre "import static com.showboy.Myclass" y "import com.showboy.Myclass"?

El primero debe generar un error de compilador ya que la importación estática solo funciona para importar campos o tipos de miembros. (asumiendo que MyClass no es una clase interna o miembro de showboy)

Creo que quisiste decir

import static com.showboy.MyClass.*;

lo que hace que todos los campos y miembros estáticos de MyClass estén disponibles en la unidad de compilación real sin tener que calificarlos ... como se explicó anteriormente


Digamos que tiene campos y métodos estáticos dentro de una clase llamada MyClass dentro de un paquete llamado myPackage y quiere acceder a ellos directamente escribiendo myStaticField o myStaticMethod sin escribir cada vez que MyClass.myStaticField o MyClass.myStaticMethod .

Nota: debe realizar una import myPackage.MyClass o myPackage.* Para acceder a los otros recursos


El modificador static después de la import es para recuperar / usar campos estáticos de una clase. Un área en la que utilizo import static es para recuperar constantes de una clase. También podemos aplicar import static en métodos estáticos. Asegúrese de escribir import static porque static import es incorrecta.

¿Qué es static import en Java? JavaRevisited - Un muy buen recurso para saber más sobre la import static .


La import permite al programador de java acceder a las clases de un paquete sin la calificación del paquete.

La función de static import permite acceder a los miembros estáticos de una clase sin la calificación de clase.

La import proporciona accesibilidad a las clases y la interfaz, mientras que static import proporciona accesibilidad a los miembros estáticos de la clase.

Ejemplo:

Con importacion

import java.lang.System.*; class StaticImportExample{ public static void main(String args[]){ System.out.println("Hello"); System.out.println("Java"); } }

Con importación estática

import static java.lang.System.*; class StaticImportExample{ public static void main(String args[]){ out.println("Hello");//Now no need of System.out out.println("Java"); } }

Ver también: ¿Qué es la importación estática en Java 5?


La idea básica de la importación estática es que siempre que esté utilizando una clase estática, una variable estática o una enumeración, puede importarlos y evitarse escribiendo.

Elaboraré mi punto con el ejemplo.

import java.lang.Math; class WithoutStaticImports { public static void main(String [] args) { System.out.println("round " + Math.round(1032.897)); System.out.println("min " + Math.min(60,102)); } }

Mismo código, con importaciones estáticas:

import static java.lang.System.out; import static java.lang.Math.*; class WithStaticImports { public static void main(String [] args) { out.println("round " + round(1032.897)); out.println("min " + min(60,102)); } }

Nota : la importación estática puede hacer que su código sea confuso para leer.


La importación estática se utiliza para importar campos / métodos estáticos de una clase en lugar de:

package test; import org.example.Foo; class A { B b = Foo.B_INSTANCE; }

Puedes escribir :

package test; import static org.example.Foo.B_INSTANCE; class A { B b = B_INSTANCE; }

Es útil si a menudo se usa una constante de otra clase en su código y si la importación estática no es ambigua.

Por cierto, en su ejemplo "import estática org.example.Myclass;" no funcionará: la importación es para la clase, la importación estática es para los miembros estáticos de una clase.


No hay diferencia entre esas dos importaciones que indicas. Sin embargo, puede usar la importación estática para permitir el acceso no calificado a miembros estáticos de otras clases. Donde solía tener que hacer esto:

import org.apache.commons.lang.StringUtils; . . . if (StringUtils.isBlank(aString)) { . . .

Puedo hacer esto:

import static org.apache.commons.lang.StringUtils.isBlank; . . . if (isBlank(aString)) { . . .


Ver Documentation

La declaración de importación estática es análoga a la declaración de importación normal. Cuando la declaración de importación normal importa las clases de los paquetes, lo que permite que se utilicen sin la calificación del paquete, la declaración de importación estática importa miembros estáticos de las clases, lo que permite su uso sin la calificación de la clase.

Entonces, ¿cuándo debería usar la importación estática? ¡Muy escasamente! Solo úselo cuando de lo contrario estaría tentado a declarar copias locales de constantes, o a abusar de la herencia (el Constant Interface Antipattern). En otras palabras, utilícelo cuando requiera acceso frecuente a miembros estáticos de una o dos clases. Si abusa de la función de importación estática, puede hacer que su programa sea ilegible y no se pueda mantener, contaminando su espacio de nombres con todos los miembros estáticos que importa. Los lectores de su código (incluido usted, unos meses después de que lo haya escrito) no sabrán de qué clase proviene un miembro estático. Importar todos los miembros estáticos de una clase puede ser particularmente perjudicial para la legibilidad; Si solo necesita uno o dos miembros, impórtelos individualmente. Si se utiliza de forma adecuada, la importación estática puede hacer que su programa sea más legible, eliminando la repetición de los nombres de las clases.