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
Number
ler.
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
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 Number
keyfi 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
Comparable
yapı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()
; vedoubleValue()
.
Güneş Number
ler kendilerini örnekleri Comparable
olan (makul) karar sanırım.
Neden Java statik olarak bir sınıf bil...
Liste<Köpek> Listenin alt<Hay...
Neden't java değil.açıklama.Set(i...
Neden MongoDB Java driver rastgele bir...
Neden &; son" Java 8 arabirim yön...