2010-02-11 26 views
17

Arrays sınıfının sıralama yönteminin neden Object [] türünde bir parametre istediğini merak ediyordum. Parametre neden Karşılaştırmalı değil []. Karşılaştırılabilir bir [] aktarmazsanız, ClassCastException oluşturuyor.Neden Arrays.sort Karşılaştırılabilir [] yerine Object []?

... Neden public void sort (Nesne [] a) değil public void sort (Karşılaştırılabilir [] a)? Teşekkür

+0

var Java API içinde başka yerlerde de aynı durum var, Örneğin Serializable'ı uygulayan bir Nesneyi bekleyen ObjectOutputStream. Sanırım geliştiriciler, gereksiz dökümler yapmamızı engellemeye çalıştı. – ZeissS

+0

Gün içerisinde, sadece Sun’u değil, JDK’ları uygulayan çok sayıda kişi vardı. Sınıfın uygulamaları Karşılaştırılabilir'i arzu etmiş olabilir, ancak herhangi bir deterministik, istikrarlı sıralamaya izin vermiş olabilir. (Varsayımsal olarak konuşulur) – Kylar

cevap

8

ikinci form dizinin yeniden dağılımını gerektirecektir çünkü. Dizininizin yalnızca karşılaştırılabilir öğeler içerdiğini biliyor olsanız bile, dizi türü eşleşmediğinden, orijinal tür Nesne [] ise, bunu yalnızca Karşılaştırılabilir [] olarak atayamazsınız.

Object[] arr = new String[0]; 
String[] sarr = (String[]) arr; 

Ama yapamaz:

bunu yapabilirsiniz

Object[] arr = new Object[0]; 
String[] sarr = (String[]) arr; 

yüzden erken optimizasyon :)

4

Aksi takdirde içinde Object[] geçemez.

+1

@BalusC Birbirini karşılaştırmak için kullandığınız bir dizi Nesneyi çeşitlendirmek için geçebileceğiniz bir durum var mıdır? Sıralama yönteminin herhangi bir kullanımı, "Karşılaştırılabilir" olan nesneler tarafından yapılacaktır. Nesne [] 'nin kabul edilmesinin tek nedeni, Nesne'nin daha sık kullanıldığını ve daha tanıdık olduğunu ve ZeissS'in de dediği gibi olduğunu, aksi halde biz de yapmak zorunda olduğumuzu söylüyor. –

+5

Java API'da 'Object []' i döndüren birçok 'toArray() 'benzeri yöntem var. – BalusC

+1

"Karşılaştırılabilir " ile aynı değil, benzer Karşılaştırıcı 'uygulanıyor olabilirler. – chama

İlgili konular