Press "Enter" to skip to content

Seçkin Tozlu Posts

Effective Java Madde 35: Ordinal Yerine Nesne Alanları Kullanın

Bütün enumlar ordinal adında bir metot içerirler. Bu metot enum sabitinin enum türü içinde tanımlandığı pozisyonu döndürür. Örnek olarak aşağıdaki enum türüne bakalım: Bu enum için ordinal değerlerine bakacak olursak: Kodun çıktısı aşağıdaki gibi olacaktır. Enumda ilk tanımlanan RED sabiti 0 değerini alırken sonrakiler de birer birer artarak ilerleyen sıra…

Share
1 Comment

Effective Java Madde 34: int Değişmezleri Yerine Enum Kullanın

Bir yılın içindeki mevsimler, haftanın günleri, güneş sistemindeki gezegenler gibi önceden belli bir takım değerler taşıyan türlere numaralandırılmış tür (enumerated type) denir. Enum türleri Java’ya eklenmeden önce numaralandırılmış türleri ifade edebilmek için aşağıdaki gibi gruplanmış int değişmezleri (constant) kullanılıyordu: Yukarıdaki gibi int değişmezlerinin gruplandığı bir kullanımın çok sayıda eksikliği vardır.…

Share
3 Comments

Effective Java Madde 33: Tür Güvenlikli Heterojen Taşıyıcıları Göz Önünde Bulundurun

Üreysel türlerin yaygın olarak bilinenleri Set<E>, Map<K,V> gibi koleksiyonlar ve ThreadLocal<T> ve AtomicReference<T> gibi tek elemanlı taşıyıcılardır. Bütün bu kullanımlarda taşıyıcı olan türün kendisi parametrelerle ifade edilmektedir. Bu bizi her taşıyıcı için sabit bir sayıda tür parametresi kullanmaya zorlamaktadır. Örneğin Set eleman türünü belirleyen tek bir tür parametresine sahiptir, Map…

Share
2 Comments

Effective Java Madde 32: Üreysellerle varargs Metotları Birlikte Kullanırken Dikkatli Olun

Hem varargs metotlar (Madde 53) hem de üreyseller (generics) Java 5 ile birlikte dile eklenmiş olmalarına rağmen birbirleriyle pek de uyumlu çalışmazlar. Varargs metotların amacı istemcilerin metotlara değişken sayıda argüman geçebilmelerini sağlamaktır. Bir varargs metot çağırıldığı zaman, bu değişken sayıdaki argümanlar bir dizi yaratılarak onun içerisinde tutulur. Bu dizi, her…

Share
Leave a Comment

Effective Java Madde 31: API Esnekliğini Artırmak İçin Sınırlandırılmış Joker (bounded wildcard) Kullanın

Madde 28’de anlatıldığı üzere parametreli türler arasında hiçbir koşulda alt tür/üst tür ilişkisi bulunmaz. Örneğin String türü Object‘in bir alt türü olmasına rağmen, List<String> ile List<Object> arasında böyle bir ilişki bulunmaz. List<Object> içerisine istediğiniz türden nesneleri koyabilirsiniz ama List<String> sadece String türünden nesneler içerebilir. Bu durumda List<String> türü, List<Object> türünün…

Share
Leave a Comment

Effective Java Madde 30: Üreysel Metotları Tercih Edin

Tıpkı sınıflar gibi metotlar da üreysel (generic) olarak yazılabilir. Parametreli türlerle çalışan statik yardımcı metotlar (utility method) genellikle üreyseldir. Örneğin, Collections içerisindeki binarySearch ve sort gibi algoritma metotlarının hepsi üreyseldir. Üreysel metot yazmak üreysel tür yazmakla çok benzerdir. (Madde 29) İki kümenin birleşimini döndüren aşağıdaki kusurlu metoda bakalım: Bu metot…

Share
Leave a Comment

Effective Java Madde 29: Üreysel Türleri Tercih Edin

JDK tarafından sağlanan üreysel türleri (generic types) ve metotları kullanmak çok zor olmasa da, kendiniz üreysel türler yazmak istediğinizde biraz zorlanabilirsiniz ama bunu öğrenmeniz çok faydalı olacaktır. Şimdi Madde 7’deki basitleştirilmiş yığıt (stack) gerçekleştirimine bakalım: Bu sınıf en başından beri üreysel olmalıydı ama sonradan mevcut istemcilere zarar vermeden üreysele dönüştürmek…

Share
2 Comments

Effective Java Madde 28: Listeleri Dizilere Tercih Edin

Dizilerin, üreysel türlerden iki önemli farkı vardır. Birincisi, diziler covariant üreysel türler ise invariant olarak tanımlanır. Peki bu ne demektir? Örneğin, Sub türü Super türünün bir alt türü ise (kalıtıyorsa veya arayüz olarak uyguluyorsa), Sub[] dizi türü de Super[] dizi türünün alt türüdür. Üreysel türlerde ise Type1 ve Type2 herhangi…

Share
3 Comments

Effective Java Madde 27: Kontrolsüz Uyarılardan (unchecked warning) Kurtulun

Yazıya başlamadan önce Java derleyicisinin verdiği kontrolsüz uyarı (unchecked warning) ne anlama geliyor ondan bahsedelim. Kısaca, derleyici burada bize tür güvenliğini (type safety) garanti edemediğini söylemektedir. Burada ”kontrolsüz” ifadesi biraz yanıltıcıdır çünkü uyarının kontrolsüz olması söz konusu değildir. İfade etmek istediği şey, derleyicinin tür güvenliğini sağlamak için yeterli tür bilgisine…

Share
1 Comment

Effective Java Madde 26: Ham (raw) Türleri Kullanmayın

Tanımında bir veya birden fazla tür parametresi bulunduran sınıf veya arayüzlere üreysel (generic) sınıf veya arayüz denir. Örneğin, List arayüzü E isminde, listedeki elemanların türünü temsil eden bir tür parametresi bulundurur. Burada üreysel arayüzün tam adı List<E> olmaktadır. Üreysel sınıflar ve arayüzler toplu olarak üreysel türler olarak anılırlar. Her üreysel…

Share
3 Comments