Mesele:
Statik import, Java 5 (JDK 1.5) ile kodun okunabilirliğini artırmak ve kelime sayısını azaltmak için tanıtılmıştır. Bu mekanizma çıkmadan önce, başka bir sınıfın statik üyelerini kullanmak için her zaman sınıfın tam adını yazmak gerekiyordu, bu da kodu ağır ve daha az temiz hale getiriyordu.
Sorun:
Sıklıkla bir sınıf içinde statik yöntemlere veya alanlara çok kez erişmek gerekebilir (örneğin, matematik fonksiyonları veya sabitler için). Her seferinde sınıf adını belirtmek, okunabilirliği zorlaştırır ve kod miktarını artırır.
Çözüm:
Statik import mekanizması, statik sınıf üyelerini (yöntemler veya alanlar) doğrudan içeri aktarmayı sağlar, böylece bunlara sınıf adı ön eki olmadan erişebiliriz. Bu, kodu basitleştirir ve özellikle Math gibi yoğun kullanılan kütüphanelerde daha kompakt hale getirir.
Kod örneği:
import static java.lang.Math.*; public class StaticImportExample { public static void main(String[] args) { double x = cos(PI * 2); double y = pow(2, 4); System.out.println(x + ", " + y); } }
Ana özellikler:
Yıldız işareti (Wildcard Static Import) ile sınıfın tüm statik üyelerini içe aktarmak mümkün mü?
Evet, mümkündür. import static java.lang.Math.*; ifadesi, bu sınıfın tüm statik yöntemlerini ve alanlarını içe aktarır. Ancak bu okunabilirliği azaltır ve diğer içe aktarılan sınıflarda varsa isim çakışmalarına neden olabilir.
Mevcut olmayan bir sınıfın statik üyelerini içe aktarmak mümkün mü?
Hayır, derleyici hata verir. Örneğin,
import static java.util.List.NONEXISTENT_FIELD; // Derleme hatası
Static import, statik olmayan sınıf üyeleri için çalışır mı?
Hayır. Statik import yalnızca statik yöntemler ve alanlar için uygulanır. Statik olmayan üyeleri içe aktarma girişimi derleme hatası ile sonuçlanır.
*) kötüye kullanımı okunabilirliği azaltır ve isim çakışmalarına neden olurBir ekip programcısı import static java.lang.Math.*; ve import static java.util.Collections.*; kullanıyor; isimlerin örtüşmesine dikkat etmiyor. Sonuçta, her belirli noktada hangi yöntem veya sabitin kullanıldığını anlamak zorlaşıyor ve yeni kütüphaneler geldiğinde isim çakışmaları olasılığı artıyor.
Artılar:
Eksiler:
Geliştirici, yalnızca Math'ten gerekli yöntemleri içe aktarıyor, örneğin:
import static java.lang.Math.PI; import static java.lang.Math.cos;
Projenin tamamı anlaşılır ve sürdürülebilir durumda kalıyor, statik olarak içe aktarılan üyeleri kolayca takip edebiliyor.
Artılar:
Eksiler: