Ortak Yöntemler – Blog Yazma – Web Tasarımı Yapımı – Web Tasarımı YouTube Videosu Yapımı – Web Sitesi Tasarlama Fiyatları
Ortak Yöntemler
Object somut bir sınıf olmasına rağmen, öncelikle genişleme için tasarlanmıştır. Tüm nihai olmayan yöntemleri (equals, hashCode, toString, klon ve finalize), geçersiz kılınacak şekilde tasarlandıkları için açık genel sözleşmelere sahiptir. Genel sözleşmelerine uymak, bu yöntemleri geçersiz kılan herhangi bir sınıfın sorumluluğundadır; bunu yapmamak, bu sözleşmelere bağlı olan diğer sınıfların, sınıfla birlikte düzgün şekilde çalışmasını engelleyecektir.
Bu bölüm, nihai olmayan Object yöntemlerini ne zaman ve nasıl geçersiz kılacağınızı anlatır. Sonlandırma yöntemi, Madde 6’da tartışıldığı için bu bölümden çıkarılmıştır. Bir Object yöntemi olmasa da, benzer bir karaktere sahip olduğu için Comparable.compareTo bu bölümde tartışılmıştır.
Eşitliği Geçersiz Kılma
Eşittir yöntemini geçersiz kılmak basit görünüyor, ancak bunu yanlış anlamanın birçok yolu var ve sonuçları korkunç olabilir. Sorunlardan kaçınmanın en kolay yolu, eşittir yöntemini geçersiz kılmak değildir, bu durumda her örnek yalnızca kendisine eşittir.
Aşağıdaki koşullardan herhangi biri geçerliyse yapılacak doğru şey budur:
• Sınıfın her örneği doğal olarak benzersizdir. Bu, Thread gibi değerler yerine aktif varlıkları temsil eden sınıflar için geçerlidir. Object tarafından sağlanan equals uygulaması bu sınıflar için tam olarak doğru davranışa sahiptir.
• Sınıfın bir “mantıksal eşitlik” testi sağlayıp sağlamadığı umurunuzda değil. Örneğin, java.util.Random, iki Rastgele örneğinin ileride aynı rasgele sayı dizisini üretip üretmeyeceğini kontrol etmek için eşittir geçersiz kılınmış olabilir, ancak tasarımcılar müşterilerin bu işlevselliğe ihtiyaç duyacağını veya isteyeceğini düşünmedi. Bu koşullar altında, Object’ten devralınan equals uygulaması yeterlidir.
• Bir üst sınıf, eşittir geçersiz kılınmıştır ve üst sınıftan devralınan davranış bu sınıf için uygundur. Örneğin, çoğu Set uygulaması, equals uygulamasını AbstractSet’ten, List uygulamalarını AbstractList’ten ve Map uygulamalarını AbstractMap’ten devralır.
• Sınıf özel veya paket özeldir ve eşittir yönteminin asla çağrılmayacağından eminsiniz. Muhtemelen, bir gün yanlışlıkla çağrılması durumunda, bu koşullar altında eşittir yöntemi geçersiz kılınmalıdır.
Peki Object.equals’ı geçersiz kılmak ne zaman uygun olur? Bir sınıf, salt nesne kimliğinden farklı bir mantıksal eşitlik kavramına sahip olduğunda ve bir üst sınıf, istenen davranışı uygulamak için eşittir geçersiz kılınmamışsa. Bu genellikle Tamsayı veya Tarih gibi değer sınıfları için geçerlidir.
Equals yöntemini kullanarak değer nesnelerine referansları karşılaştıran bir programcı, aynı nesneye atıfta bulunup bulunmadıklarını değil, mantıksal olarak eşdeğer olup olmadıklarını bulmayı bekler. Yalnızca programcı beklentilerini karşılamak için gerekli olan equals yöntemini geçersiz kılmakla kalmaz, aynı zamanda sınıf örneklerinin, tahmin edilebilir, istenen davranışa sahip harita anahtarları veya küme öğeleri olarak hizmet etmesini sağlar.
Equals yönteminin geçersiz kılınmasını gerektirmeyen bir tür değer sınıfı, typesafe enum’dur. Typesafe enum sınıfları, her değerde en fazla bir nesnenin var olduğunu garanti ettiğinden, Object’in equals yöntemi, bu tür sınıflar için bir mantıksal equals yöntemine eşdeğerdir.
Eşittir yöntemini geçersiz kıldığınızda, genel sözleşmesine bağlı kalmalısınız. Java.lang.Object spesifikasyonundan kopyalanan sözleşme:
Eşittir yöntemi bir denklik ilişkisi uygular:
• Dönüşlüdür: Herhangi bir x referans değeri için x.equals(x) true döndürmelidir.
• Simetriktir: Herhangi bir x ve y referans değeri için, x.equals(y) yalnızca ve ancak y.equals(x) true değerini döndürürse doğru döndürmelidir.
• Geçişlidir: Herhangi bir x, y ve z referans değeri için, x.equals(y) true ve y.equals(z) true döndürürse, x.equals(z) true döndürmelidir.
• Tutarlıdır: Herhangi bir x ve y referans değeri için, x.equals(y)’nin birden çok çağrılması, nesne üzerinde eşittir karşılaştırmalarında kullanılan hiçbir bilginin değiştirilmemesi koşuluyla tutarlı bir şekilde doğru veya tutarlı bir şekilde yanlış döndürür.
• Null olmayan herhangi bir x referans değeri için x.equals(null) false döndürmelidir.
Java indirdikten sonra
Chrome flags/#enable-npapi Java
Java’yı kuramıyorum
Java Tarayıcı
Java kontrol
Java bilgisayara tanıtma
Java plug-in
Java engeli nasıl kaldırılır
Matematiksel olarak meyilli değilseniz, bu biraz korkutucu görünebilir, ancak görmezden gelmeyin! Bunu ihlal ederseniz, programınızın düzensiz davrandığını veya çöktüğünü fark edebilirsiniz ve hatanın kaynağını saptamak çok zor olabilir. John Donne’un deyişiyle, hiçbir sınıf bir ada değildir. Bir sınıfın örnekleri sıklıkla diğerine geçirilir. Tüm koleksiyon sınıfları da dahil olmak üzere birçok sınıf, eşittir sözleşmesine uyarak kendilerine iletilen nesnelere bağlıdır.
Artık eşittir sözleşmesini ihlal etmenin kötülüklerinin farkında olduğunuza göre, sözleşmeyi ayrıntılı olarak gözden geçirelim. İyi haber şu ki, görünüşe rağmen, sözleşme gerçekten çok karmaşık değildir.
Bir kez anladığınızda, ona bağlı kalmak zor değil. Beş şartı sırasıyla inceleyelim:
- Yansıma – İlk gereklilik, yalnızca bir nesnenin kendisine eşit olması gerektiğini söyler. Bu şartı istemeden ihlal etmeyi hayal etmek zor. Bunu ihlal edecek ve ardından sınıfınızın bir örneğini bir koleksiyona ekleseydiniz, koleksiyonun içerme yöntemi neredeyse kesinlikle koleksiyonun az önce eklediğiniz örneği içermediğini söylerdi.
- Simetri— İkinci şart, herhangi iki nesnenin eşit olup olmadığı konusunda anlaşmaları gerektiğini söyler. İlk şartın aksine, bunu istemeden ihlal etmeyi hayal etmek zor değil. Örneğin, aşağıdaki sınıfı düşünün.
Beklendiği gibi, cis.equals(s) true değerini döndürür. Sorun şu ki, CaseInresponsiveString’deki equals yöntemi sıradan dizeler hakkında bilgi sahibiyken, String’deki equals yöntemi büyük/küçük harfe duyarlı olmayan dizelerden habersizdir. Bu nedenle s.equals(cis) yanlış döndürür, bu da simetrinin açık bir ihlalidir. Bir koleksiyona büyük/küçük harfe duyarsız bir dize koyduğunuzu varsayalım.
Bu noktada list.contains(s) ne döndürür? Kim bilir? Sun’ın şu anki uygulamasında, false döndürür, ancak bu yalnızca bir uygulama yapaydır. Başka bir uygulamada, aynı kolaylıkla true döndürebilir veya bir çalışma zamanı istisnası verebilir. Eşittir sözleşmesini bir kez ihlal ettiğinizde, diğer nesnelerin sizin nesnenizle karşılaştığında nasıl davranacağını bilemezsiniz.
Sorunu ortadan kaldırmak için, yalnızca String ile birlikte çalışmak için kötü tasarlanmış girişimi equals yönteminden kaldırın. Bunu yaptıktan sonra, tek bir getiri sağlamak için yöntemi yeniden değerlendirebilirsiniz.
Web sitelerinizi, arama motorlarında en yukarı getirmek adına sizlere 3 adet paket öneriyoruz. Bu paketler sayesinde web siteleriniz aramalarda 1 yıl içerisinde en yukarıya tırmanacaktır.
1) Backlink Paketi 50 $ (Yıllık Ücret)
2) Hızlandırma Paketi 300 $ (Yıllık Ücret)
3) Kelime Yönlendirme Paketi 150 $ (Aylık Ücret)