Statický import - Static import
Statický import je funkce zavedená v Programovací jazyk Java který umožňuje členům (polím a metodám), jejichž rozsah byl v rámci jejich třídy kontejnerů vymezen jako veřejná statika
, které mají být použity v kódu Java bez zadání třídy, ve které bylo pole definováno. Tato funkce byla zavedena do jazyka v verze 5.0.
Tato funkce poskytuje typicky bezpečný mechanismus konstanty do kódu, aniž byste museli odkazovat na třídu, která původně definovala pole. Pomáhá také zastarat praxi vytváření a konstantní rozhraní (an rozhraní který definuje pouze konstanty a poté napíše třídu implementující toto rozhraní, což je považováno za nevhodné použití rozhraní.[1])
Mechanismus lze použít k odkazu na jednotlivé členy třídy:
import statické java.lang.Math.PI;import statické java.lang.Math.pow;
nebo všechny statické členy třídy:
import statické java.lang.Math. *;
Například tato třída:
veřejnost třída Ahoj světe { veřejnost statický prázdnota hlavní(Tětiva[] args) { Systém.ven.tisk("Ahoj světe!"); Systém.ven.tisk(„Vzhledem k kruhu o průměru 5 cm má“); Systém.ven.tisk("obvod" + (Matematika.PI * 5) + " cm"); Systém.ven.tisk(„a oblast“ + (Matematika.PI * Matematika.prášek(2.5, 2)) + „čtvereční cm“); }}
Místo toho lze napsat jako:
import statické java.lang.Math. *;import statické java.lang.System.out;veřejnost třída Ahoj světe { veřejnost statický prázdnota hlavní(Tětiva[] args) { ven.tisk("Ahoj světe!"); ven.tisk(„Vzhledem k kruhu o průměru 5 cm má“); ven.tisk("obvod" + (PI * 5) + " cm"); ven.tisk(„a oblast“ + (PI * prášek(2.5, 2)) + „čtvereční cm“); }}
Dvojznačnost
Pokud jsou dva statické členy se stejným názvem importovány z více různých tříd, kompilátor vyvolá chybu, protože nebude schopen určit, který člen se má použít při absenci kvalifikace názvu třídy.For example, the following code will fail sestavit:
import statické java.lang.Integer. *;import statické java.lang.Long. *;veřejnost třída Ahoj světe { veřejnost statický prázdnota hlavní(Tětiva[] args) { Systém.ven.tisk(MAX_VALUE); }}
V tomto případě, MAX_VALUE
je nejednoznačný, protože MAX_VALUE
pole je atributem obou java.lang.Integer
a java.lang.Long
. Předpona pole s názvem třídy disambiguate třídu, ze které MAX_VALUE
je odvozeno, ale díky tomu je použití statického importu nadbytečné.[2]