SORU
30 Kasım 2011, ÇARŞAMBA


"Karşılaştırma yöntemi, genel sözleşme&! aykırı"

Biri basitçe, neden bu kod bir özel durum, açıklamama "Karşılaştırma yöntemi genel sözleşmesini ihlal",! ve bunu nasıl düzeltebilirim?

private int compareParents(Foo s1, Foo s2) {
    if (s1.getParent() == s2) return -1;
    if (s2.getParent() == s1) return 1;
    return 0;
}

CEVAP
30 Kasım 2011, ÇARŞAMBA


Senin karşılaştırıcı değil geçişli.

A ** 3 ve B üst C ebeveyn olalım. A > B B > C beri A > C durum böyle olmalı. Eğer karşılaştırıcı A C, çağrıldığında ancak, sıfır, A == C anlam iade eder. Bu Sözleşmeyi ihlal ve dolayısıyla istisna atar.

Bu tespit edip bildirmek yerine, kararsız davranmasına için kütüphanenin iyi bir şey değil.

compareParents() geçişlilik ihtiyacını karşılamak için bir yol sadece acil ata bakmak yerine gez getParent() zinciri.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Elefant Traks

    Elefant Trak

    5 HAZİRAN 2007
  • psidot

    psidot

    2 Kasım 2006
  • Shaollin Animes

    Shaollin Ani

    19 HAZİRAN 2013