Sonuçlar
Eşit seçilmiş dört (eşit) uygulama örneğini inceledikten sonra, neyi sonuçlandırıyoruz?
Her şeyden önce: equals () uygulamasında tip eşleşmesi için denetim yapmanın iki farklı yolu vardır. Bir sınıf, instanceof operatörü aracılığıyla üst ve alt sınıf nesneleri arasında karışık tipte karşılaştırmaya izin verebilir veya bir sınıf, getClass () testi aracılığıyla farklı türdeki nesnelere eşit olmayan olarak davranabilir. Yukarıdaki örnekler getClass () kullanarak equals () uygulamalarının instanceof kullanan uygulamalardan genellikle daha sağlam olduğunu güzel bir şekilde göstermiştir.
İnstanceof testi yalnızca son sınıflar için veya bir üst sınıfta en azından yöntem eşittir () sonsa doğrudur. İkincisi, temelde hiçbir alt sınıfın üst sınıfın durumunu genişletmemesi gerektiği anlamına gelir, ancak yalnızca geçici veya statik alanlar gibi nesnenin durumu ve davranışı için alakasız işlevsellik veya alanlar ekleyebilir.
Diğer yandan getClass () testini kullanan uygulamalar her zaman equals () sözleşmesine uygundur; doğru ve sağlamdırlar. Ancak semantik olarak, test örneğini kullanan uygulamalardan anlamsal olarak çok farklıdırlar. GetClass () kullanan uygulamalar, alt sınıf herhangi bir alan eklemese ve eşittir () öğesini geçersiz kılmak istemese bile, alt sınıf üst sınıf nesnelerle karşılaştırılmasına izin vermez. Böyle bir "önemsiz" sınıf uzantısı, örneğin tam olarak bu "önemsiz" amaç için tanımlanan bir alt sınıfa bir hata ayıklama-yazdırma yönteminin eklenmesi olacaktır. Üst sınıf, getClass () denetimi aracılığıyla karışık tür karşılaştırmasını yasaklarsa, önemsiz uzantı üst sınıfıyla karşılaştırılamaz. Bunun bir sorun olup olmadığı tamamen sınıfın anlambilimine ve uzantının amacına bağlıdır.
x instanceof SomeClass
ise yanlıştırx
olduğununull
. Bu nedenle, ikinci sözdiziminin null kontrole ihtiyacı yoktur.