462 votes

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

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?

407voto

xsl Points 7362

Voir http://java.sun.com/j2se/1.5.0/docs/guide/language/static-import.html

La statique de la déclaration d'importation est analogue à la normale à l'importation de la déclaration. Où la normale à l'importation déclaration des importations des classes de paquets, leur permettant d'être utilisé sans forfait de qualification, l' statique de la déclaration d'importation les importations les membres statiques de classes, permettant pour être utilisé sans classe la qualification.

Donc, quand devez-vous utiliser statique d'importation? Très peu! Utiliser seulement quand vous pourriez avoir autrement être tenté de déclarer local des copies des constantes, ou à l'abus de l'héritage (la Constante de l'Interface Antipattern). En d'autres termes, il lorsque vous avez besoin d'un accès plus fréquent à les membres statiques d'une ou deux des classes. Si vous abusez de la statique la fonctionnalité d'importation, il peut rendre votre programme illisible et difficile à maintenir, polluer son espace de noms avec tous les les membres statiques de l'importer. Les lecteurs de votre code (y compris vous-même, quelques mois après vous l'avez écrit) ne saura pas la classe à laquelle un membre statique vient partir de. L'importation de l'ensemble de la statique les membres d'une classe peuvent être particulièrement nuisible à la lisibilité; si vous avez besoin de seulement un ou deux membres, importer individuellement. Utilisé de façon appropriée, statiques import peut faire votre programme plus lisible, par retirer le passe-partout de répétition des noms de classe.

240voto

Victor Points 757

Il n'y a pas de différence entre ces deux importations-vous de l'état. Vous pouvez, toutefois, utiliser la statique à l'importation afin de permettre non qualifiés de l'accès à l'électricité statique des membres d'autres classes. Lorsque j'ai utilisé pour ce faire:

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

Je peux faire ceci:

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

58voto

Nicolas Points 11558

Statique d'importation permet d'importer des champs statiques / méthode de classe au lieu de:

package test;

import org.example.Foo;

class A {

 B b = Foo.B_INSTANCE;

}

Vous pouvez écrire :

package test;

import static org.example.Foo.B_INSTANCE;

class A {

 B b = B_INSTANCE;

}

Il est utile si vous êtes souvent utilisé une constante à partir d'une autre classe dans votre code et si la statique d'importation n'est pas ambigu.

Btw, dans votre exemple, "import static org.exemple.Maclasse;" ne fonctionne pas : l'importation est pour la classe, de l'importation statique est pour les membres statiques d'une classe.

40voto

Rahul Saxena Points 161

L'idée de base de la statique à l'importation est qu'à chaque fois que vous utilisez une classe statique,une variable statique ou un enum,vous pouvez les importer et de les sauver de la saisie.

Je vais expliquer mon point de avec exemple.

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));`enter code here`
 }
}

Même code, de l'électricité statique, les importations:

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: statique d'importation peuvent rendre votre code difficile à lire.

24voto

Carlos Heuberger Points 11804

la différence entre "l'importation statique com.showboy.Myclass" et "import com.showboy.Myclass"?

Le premier devrait générer une erreur du compilateur depuis la statique de l'importation ne fonctionne que pour l'importation des champs ou des types de membres. (en supposant que MyClass n'est pas un intérieur de classe ou un membre de showboy)

Je pense que vous vouliez dire

import static com.showboy.MyClass.*;

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X