web-dev-qa-db-fra.com

Que signifie le modificateur "statique" après "import"?

Lorsqu'il est utilisé comme ceci:

import static com.showboy.Myclass;

public class Anotherclass{}

quelle est la différence entre import static com.showboy.Myclass et import com.showboy.Myclass?

425
JSON

Voir Documentation

La déclaration d'importation statique est analogue à la déclaration d'importation normale. Lorsque la déclaration d'importation normale importe des classes depuis des packages, ce qui permet leur utilisation sans qualification de package, la déclaration d'importation statique importe les membres statiques des classes, ce qui permet leur utilisation sans qualification de classe.

Alors, quand devriez-vous utiliser l'importation statique? Très économiquement! Ne l'utilisez que lorsque vous êtes autrement tenté de déclarer des copies locales de constantes ou d'abuser de l'héritage (Constant Interface Antipattern). En d'autres termes, utilisez-le lorsque vous avez besoin d'un accès fréquent à des membres statiques d'une ou deux classes. Si vous abusez de la fonctionnalité d'importation statique, votre programme risque d'être illisible et inaccessible, en polluant son espace de noms avec tous les membres statiques que vous importez. Les lecteurs de votre code (y compris vous, quelques mois après l'avoir écrit) ne sauront pas de quelle classe provient un membre statique. Importer tous les membres statiques d'une classe peut être particulièrement préjudiciable à la lisibilité; si vous n'avez besoin que d'un ou deux membres, importez-les individuellement. Utilisée à bon escient, l’importation statique peut rendre votre programme plus lisible en supprimant le passe-partout de la répétition des noms de classe.

378
xsl

Il n'y a pas de différence entre ces deux importations que vous indiquez. Vous pouvez toutefois utiliser l'importation statique pour autoriser un accès non qualifié à des membres statiques d'autres classes. Où je devais faire ceci:

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

Je peux le faire:

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

Vous pouvez voir plus dans le documentation .

219
Victor

L'importation statique permet d'importer des champs/méthodes statiques d'une classe au lieu de:

package test;

import org.example.Foo;

class A {

 B b = Foo.B_INSTANCE;

}

Tu peux écrire :

package test;

import static org.example.Foo.B_INSTANCE;

class A {

 B b = B_INSTANCE;

}

C'est utile si vous utilisez souvent une constante d'une autre classe dans votre code et si l'importation statique n'est pas ambiguë.

Btw, dans votre exemple "import static org.example.Myclass;" ne fonctionnera pas: import est pour la classe, import statique est pour les membres statiques d'une classe.

57
Nicolas

L'idée de base de l'importation statique est que, chaque fois que vous utilisez une classe statique, une variable statique ou une énumération, vous pouvez les importer et vous épargner une certaine saisie.

Je vais élaborer mon point avec des exemples.

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));
 }
}

Même code, avec importations statiques:

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));
  }
}

Note: l'importation statique peut rendre votre code difficile à lire.

35
Rahul Saxena

la différence entre "importer statique com.showboy.Myclass" et "importer com.showboy.Myclass"?

Le premier doit générer une erreur de compilation car l’importation statique ne fonctionne que pour l’importation de champs ou de types de membres. (en supposant que MyClass n'est pas une classe interne ou un membre de showboy)

Je pense que tu voulais dire

import static com.showboy.MyClass.*;

qui rend tous les champs statiques et les membres de MyClass disponibles dans l'unité de compilation réelle sans avoir à les qualifier ... comme expliqué ci-dessus

23
Carlos Heuberger

La import permet au programmeur Java d'accéder aux classes d'un paquet sans qualification de paquet.

La fonction static import permet d’accéder aux membres statiques d’une classe sans la qualification de classe.

Le import fournit l'accessibilité aux classes et à l'interface alors que static import fournit l'accessibilité aux membres statiques de la classe.

Exemple:

Avec importer

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

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

  }   
} 

Avec importation statique

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");  

 }   
} 

Voir aussi: Qu'est-ce que l'importation statique dans Java 5

14
roottraveller

Supposons que vous ayez des champs et des méthodes statiques dans une classe appelée MyClass dans un package appelé myPackage et que vous souhaitez y accéder directement en tapant myStaticField ou myStaticMethod sans taper à chaque fois MyClass.myStaticField ou MyClass.myStaticMethod.

Remarque: vous devez effectuer un import myPackage.MyClass ou myPackage.* pour accéder aux autres ressources.

2
Java Main

Le modificateur static après import sert à récupérer/utiliser les champs statiques d'une classe. Un domaine dans lequel j'utilise import static sert à récupérer les constantes d'une classe. Nous pouvons également appliquer import static sur des méthodes statiques. Assurez-vous de taper import static car static import est erroné.

Qu'est-ce que static import dans Java - JavaRevisited - Une très bonne ressource pour en savoir plus à propos de import static.

1
RajeeV VenkaT