SORU
26 Ocak 2009, PAZARTESİ


Neden't java değil.lang.Sayı uygulamaya Karşılaştırılabilir?

Herkes java.lang.Number Comparable uygulamıyor neden biliyor mu? Bu sıralama yapamazsınız demek bana biraz tuhaf görünüyor Collections.sort Numberler.

Tartışma sonrası güncelleme:

Tüm yararlı cevaplar için teşekkürler. some more research about this topic ben de yapıyordum.

Java neden en basit açıklama.lang.Sayı Karşılaştırılabilir mutability kaygıları yatmaktadır uygulamıyor.

Biraz inceleme, java.lang.Number Özet süper tip AtomicInteger, AtomicLong, BigDecimal, BigInteger, Byte, Double, Float, Integer, Long Short. Bu liste, AtomicInteger AtomicLong Comparable uygulamak değil.

Kazı yaparken, nesneleri veya karşılaştırma karşılaştırma sonucunda render sonrası işe yaramaz değiştirebilir çünkü değişken türleri Comparable uygulamak için iyi bir uygulama keşfettim. AtomicLong AtomicInteger Her ikisi de değiştirilebilir. API tasarımcılar gelecek rapor edilen uygulaması kısıtlı olurdu çünkü Number Comparable uygulamak zorunda değil sağduyu vardı. Nitekim AtomicLong AtomicInteger uzun java.lang.Number başlangıçta uygulanan sonra Java 1.5 eklenmiştir.

Ayrı mutability, muhtemelen diğer hususlar burada da vardır. Number ** 28 uygulama Number alt türleri tüm uzlaşmacı yeteneğine sahip olduğu için BigDecimal tüm sayısal değerlerin tanıtılması gerekir. Matematik ve performans açısından terfi ima bana biraz belirsiz, ama benim sezgi bu çözüm kludgy bulur.

CEVAP
26 Ocak 2009, PAZARTESİ


Aşağıdaki ifade, bu kayda değer bulunuyor:

new Long(10).equals(new Integer(10))

her zaman Seyahat bir noktada herkesin ya da başka bir eğilimi false. Ama bile eşit olup olmadıklarını belirlemek değil Numberkeyfi s karşılaştırabilirsiniz.

Ayrıca, gerçek ilkel türleri (, *float*36)ile, Eğer iki değer eşit olup olmadığını belirlemek zor ve kabul edilebilir bir hata payı dahilinde yapılmalıdır. Deneyin kodu gibi:

double d1 = 1.0d;
double d2 = 0.0d;
for (int i=0; i<10; i  ) {
  d2  = 0.1d;
}
System.out.println(d2 - d1);

ve bazı küçük bir fark kalmaz.

Bu yüzden geriNumber Comparableyapıyor sorun. Bunu nasıl uygulamak istiyorsunuz? doubleValue() gibi bir şey kullanarak onu güvenilir yapmaz. Number alt hatırlıyorum

  • Byte;
  • Short;
  • Integer;
  • Long;
  • AtomicInteger;
  • AtomicLong;
  • Float;
  • Double;
  • * *50;
  • BigDecimal.

Eğer örneğin tabloların bir dizi haline gelmesi değil compareTo() güvenilir bir yöntem kod misiniz? Number örneklerine yalnızca altı yöntem vardır:

  • byteValue();
  • shortValue();
  • intValue();
  • longValue();
  • floatValue(); ve
  • doubleValue().

Güneş Numberler kendilerini örnekleri Comparable olan (makul) karar sanırım.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ETrade Supply

    ETrade Suppl

    23 Temmuz 2011
  • Gali B

    Gali B

    1 EYLÜL 2006
  • Phymec

    Phymec

    18 Temmuz 2009