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


Cuando se usa así:

import static com.showboy.Myclass;

public class Anotherclass{}

¿Cuál es la diferencia entre import static com.showboy.Myclass y import com.showboy.Myclass?

Author: ROMANIA_engineer, 2008-10-02

8 answers

Véase Documentación

La declaración de importación estática es análogo a la importación normal declaración. Donde la importación normal declaración importaciones clases de paquetes, lo que les permite ser utilizados sin la calificación del paquete, el declaración de importación estática importaciones miembros estáticos de clases, permitiendo para ser utilizados sin clase cualificación.

Entonces, ¿cuándo debe usar la importación estática? ¡Con moderación! Sólo úsalo cuando de lo contrario estar tentado a declarar local copias de constantes, o para abusar herencia (la Interfaz Constante Antipattern). En otras palabras, úsalo cuando necesita acceso frecuente a miembros estáticos de uno o dos clase. Si utilizas en exceso la estática función de importación, puede hacer que su programa ilegible e inalcanzable, contaminando su espacio de nombres con todos los miembros estáticos que importa. Lectores de su código (incluido usted, unos meses después de que usted lo escribió) no sabrá qué clase a static member comes de. Importación de todos los estáticos los miembros de una clase pueden ser especialmente perjudicial para la legibilidad; si solo necesita uno o dos miembros, impórtalos individualmente. Utilizar apropiadamente, la importación estática puede hacer su programa más legible, por eliminar la repetición repetitiva de nombres de clase.

 336
Author: xsl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-03 13:55:50

No hay diferencia entre esas dos importaciones que usted afirma. Sin embargo, puede usar la importación estática para permitir el acceso no cualificado 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)) {
      .
      .
      .
 200
Author: Victor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-03 20:05:39

Static import se usa 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 static org.ejemplo.Myclass;" no funcionará: importar es para clase, importar estática es para miembros estáticos de una clase.

 52
Author: Nicolas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-14 11:03:01

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 importarlas y ahorrarse algo de escritura.

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.

 33
Author: Rahul Saxena,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-15 05:27:36

La diferencia entre " importar com estático.showboy.Myclass " y " import com.showboy.Myclass"?

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

Creo que querías decir

import static com.showboy.MyClass.*;

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

 22
Author: Carlos Heuberger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-14 11:00:53

El import permite al programador java acceder a clases de un paquete sin calificación de paquete.

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

El 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 importar

import java.lang.System.*;    
class StaticImportExample{  
    public static void main(String args[]){  

       System.out.println("Hello");
       System.out.println("Java");  

  }   
} 

Con estática importar

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

 12
Author: roottraveller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-10 14:56:55

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

Nota : usted necesita hacer un import myPackage.MyClass o myPackage.* para acceder a los otros recursos

 2
Author: Java Main,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-22 15:15:53

El modificador static después de import es para recuperar/usar campos estáticos de una clase. Un área en la que uso 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 incorrecto.

Qué es static import en Java-JavaRevisited - Un recurso muy bueno para saber más sobre import static.

 1
Author: RajeeV VenkaT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-16 20:18:22