2010-02-11 15 views
17

Zastanawiam się, dlaczego metoda sortowania klasy Arrays wymaga parametru typu Object []. Dlaczego parametr nie jest typu Comparable []. Jeśli nie przejdziesz porównywalnego [], generujesz wyjątek ClassCastException.Dlaczego Arrays.sort przyjmuje Object [] zamiast Comparable []?

Dlaczego ... public static void sort (Object [] a) i nie public static void sort (Porównywalne [] a)? Dzięki

+0

mieć taką samą sytuację w innych miejscach w API Java, na przykład ObjectOutputStream, który oczekuje obiektu realizującego Serializable. Wydaje mi się, że programiści starali się uniemożliwić nam wykonywanie niepotrzebnych rzutów. – ZeissS

+0

W ciągu dnia było wiele osób wdrażających JDK, a nie tylko Słońce. Wdrożenia klasy mogły wymagać Porównywalnych, ale pozwalały na dowolny deterministyczny, stabilny rodzaj. (Hipotetycznie rzecz biorąc) – Kylar

Odpowiedz

8

Ponieważ druga forma wymagałaby realokacji tablicy. Nawet jeśli wiesz, że twoja tablica zawiera tylko porównywalne elementy, nie możesz po prostu rzucić jej na Comparable [], jeśli pierwotnym typem był Object [], ponieważ typ tablicy nie jest zgodny.

można zrobić:

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

Ale nie można zrobić:

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

Więc to przedwczesna optymalizacja :)

4

W przeciwnym razie nie można przejść Object[] w.

+1

@ BalusC Czy istnieje jakaś sytuacja, w której przejdziesz do sortowania tablicy obiektów, o których nie wiesz, że wszystkie implementują 'porównywalne'? Każde użycie metody sortowania będzie wykonywane przez obiekty, które są "porównywalne". Wydaje się, że jedynym powodem zaakceptowania 'Object []' jest to, że 'Object' jest używany częściej i jest bardziej znajomy, i tak jak powiedział ZeissS, w przeciwnym razie musielibyśmy rzutować. –

+5

Istnieje wciąż wiele metod 'toArray()' w Java API, które zwracają 'Object []'. – BalusC

+1

Mogą one implementować 'Komparator ', który jest podobny, ale nie taki sam jak 'Porównywalny ' – chama

Powiązane problemy