Zabieram się za kolejną porcję obfitego redagowania na własnej stronie. Znowu Java bez zmian i opowiem czym jest import statyczny oraz czym się on różni od zwykłego. To również stanowi jedynie element poboczny i może pomóc lub zaszkodzić w zależności od tego, kto czyta nasz kod. Nie migajcie się, poznajcie kolejny element o którym się mało mówi.

IMPORT STATYCZNY. PIERWSZE SKOJARZENIA

Czy to ma coś wspólnego z poprzednim artykułem? Nie, w żaden sposób. Niczego nie planowałem, pomysł aby o tym napisać przyszedł do głowy dzisiaj. Być może zastanawiacie się nad tym, czym się może różnić import statyczny od zwykłego? Uspokoję Was na wstępie, że tym razem nie ma żadnych nowych słów kluczowych, jedynie dorzucacie "static" na "dokładkę". Następnie podajecie ciąg przestrzeni nazw odwołujących się do określonej klasy poczynając od "Java" (pisane z dużej litery z tych samych problemów technicznych opisanych poprzednio).

Import statyczny pozwala uniknąć pisania długich nazw których zapis jest wymagany, aby odwołać się danej funkcji. Za przykład podam "System.out.println". Wielokrotnie pisanie tego samego może być uciążliwie, nie? Przyznajcie się. Właśnie w takich sytuacjach nadarza się wspaniała okazja do zawarcia importu statycznego tak, aby skrócić sobie to odwoływanie się do przestrzeni nazw i po prostu pisać krócej. Traktujcie to jak "namespace" w C++, to również skraca pisanie.

"Kodowo" to wygląda w taki sposób:

import static [dowolna biblioteka];

To może być naprawdę ciekawe, że nawet importowanie bibliotek może kryć jeszcze jakiś zapis o którym nie mieliśmy bladego pojęcia. Sugerując się tym samym przykładem, możemy podstawić taki zapis:

Import statyczny "System.out"

Joomla tworzyła problem przy zapisie powyższych słów kluczowych, co zmusiło mnie do wszczepienia obrazka z programu "Intellij IDEA". Przepraszam z góry za niemożność skopiowania.

Import statyczny łatwo jest odróżnić od zwykłego importu. Dzięki temu możemy w tym samym pliku umieścić samo "out.println" co zostanie udowodnione w poniższym przykładzie. Dlaczego mimo wszystko musi być "out" na początku? Gdyż "out" to kopia obiektu "PrintStream" i za jej pośrednictwem wywołujemy funkcje, w tym również nałogowo wykorzystywaną "println". To nie jest metoda statyczna, tylko zwykła publiczna metoda globalnej kopii klasy "PrintStream" o nazwie "out". Zapamiętane raz na zawsze? To przechodzimy do przykładu kodu źródłowego.

KOD Z IMPORTEM STATYCZNYM

Oto mały kodzik na podsumowanie:

  • KLASA "Main"
public class Main
{
	public static void main(String[] args)
	{
		new StaticImport();
	}
}
  • KLASA "StaticImport"
public class StaticImport
{
	public StaticImport()
	{
		final int n = 25;
		int squareRoot = (int)sqrt(n);

		out.println("Pierwiastek z liczby " + n + " wynosi " + squareRoot + ".");
	}
}

Musicie sobie dołączyć importy na samej górze klasy "StaticImport" bo Joomla musi mi znowu utrudniać życie. Nie wystarczy jedynie dla "System.out.println", import statyczny musi być jeszcze dla klasy "Math", która kończy się ciągiem "lang.Math.*" z gwiazdką na końcu. W przeciwieństwie do wyżej opisanej sytuacji, "Math" to sama w sobie klasa z globalnymi metodami i nie korzysta z żadnych pośrednich instancjiKod ukazuje dodatkowe skrócenie zapisu klasy "Math" w którym jak może zdążyliście zauważyć, użyto samej funkcji "sqrt", zamiast ciągu "Math.sqrt".

Na koniec jeszcze jedno: dlaczego stwierdziłem że to może zarówno pomóc, jak i zaszkodzić? Bo to jest kwestia gustu połączona z przyzwyczajeniem. Wy możecie mieć chęć skracania tych długich nazw, ale ktoś kto będzie sprawdzał Wasz kod może chcieć usunąć import statyczny i zamienić na stary zapis. Po prostu można łatwo się przyzwyczaić do wielokrotnego pisania na piechotę i zdziwić się widząc takie skróty. Gdyby trafił się ktoś taki uparty, to możecie się jeszcze wybronić dorzucając instancję klasy "PrintStream" i za jej pomocą odwoływać się krócej do metod. To wygląda tak:

PrintStream ps = System.out;
		
ps.println("Tekst #1");
ps.println("Tekst #2");
ps.println("Tekst #3");

Ponadto, nie możecie przesadzać, gdyż może powstać kolizja nazw w przypadku skracania takich przestrzeni nazw, które posiadają tę samą nazwę wykorzystywanej metody.


Za uwagę dziękuję po raz enty. Import statyczny traktujcie jako alternatywę szybszego pisania i stosujcie ją naprawdę sporadycznie (jeśli nie w ogóle).