L'import statique est une fonctionnalité introduite dans le langage de programmation Java qui permet aux membres (champs et méthodes) qui ont été définis dans le contexte de leur classe conteneur en tant que public static, d'être utilisés dans le code Java sans spécifier la classe dans laquelle le champ a été défini. Cette fonctionnalité a été introduite dans le langage dans la version 5.0.

Cette fonctionnalité fournit un mécanisme de typage fort pour inclure des constantes dans le code sans avoir à référencer la classe qui, à l'origine, définit le champ. Cela permet également de déprécier la pratique consistant à créer une interface de constantes (où l'on crée une interface définissant uniquement des constantes puis l'on écrit une classe implémentant cette interface, ce qui est considéré comme une utilisation inappropriée des interfaces. )

Ce mécanisme peut être utilisé pour référencer des membres individuels d'une classe :import static java.lang.Math.PI; import static java.lang.Math.pow;ou bien tous les membres statiques d'une classe :import static java.lang.Math.*;Par exemple, la classe :public class HelloWorld { public static void main(String[] args) { System.out.println("Bonjour tout le monde !"); System.out.println("Soit un cercle de diamètre 5 cm, il possède"); System.out.println("un périmètre de " + (Math.PI * 5) + " cm"); System.out.println("et une surface de " + (Math.PI * Math.pow(2.5, 2)) + " cm-carrés");

}Peut autrement être écrite ainsi :import static java.lang.Math.*; import static java.lang.System.out;

public class HelloWorld { public static void main(String[] args) { out.println("Bonjour tout le monde !"); out.println("Soit un cercle de diamètre 5 cm, il possède"); out.println("un périmètre de " + (PI * 5) + " cm"); out.println("et une surface de " + (PI * pow(2.5, 2)) + " cm-carrés");

Ambiguïté Si deux membres statiques de même nom sont importés depuis plusieurs classes distinctes, le compilateur générera une erreur, car il ne pourra pas déterminer quel membre utiliser en l'absence de qualification des noms de classe. Par exemple, la compilation du code suivant débouchera sur un échec :import static java.lang.Integer.*; import static java.lang.Long.*;

public class HelloWorld { public static void main(String[] args) { System.out.println(MAX_VALUE);

}Dans ce cas, le symbole MAX_VALUE est ambigu, car le champ MAX_VALUE est un attribut à la fois de java.lang.Integer et java.lang.Long. Préfixer le champ avec son nom de classe permettra de lever l'ambiguïté de la classe d'où provient MAX_VALUE, mais cela rend l'utilisation d'un import statique redondante.

Notes

Liens externes

Imports statiques dans Java 8 (Oracle)

Catégorie:Java (langage)