2010-02-11 10 views
17

Me preguntaba por qué el método de clasificación de la clase Arrays está pidiendo un parámetro de tipo Object []. Por qué el parámetro no es del tipo Comparable []. Si no pasa un Comparable [] está generando una ClassCastException.¿Por qué Arrays.sort toma Object [] en lugar de Comparable []?

... ¿Por pública tipo static void (Object [] a) y no pública tipo static void (comparable [] a)? Gracias

+0

Tienes misma situación en otros lugares de la API de Java, p.ej ObjectOutputStream que espera que un Objeto implemente Serializable. Supongo que los desarrolladores intentaron evitar que hiciéramos lanzamientos innecesarios. – ZeissS

+0

En el pasado, había varias personas implementando JDK, no solo Sun. Las implementaciones de la clase pueden haber deseado lo Comparable, pero permitieron cualquier tipo determinista, estable. (Hipotéticamente hablando) – Kylar

Respuesta

8

Debido a que la segunda forma requeriría una reasignación de la matriz. Incluso si sabe que su matriz contiene solo elementos comparables, no puede simplemente convertirlo a Comparable [] si el tipo original era Object [], ya que el tipo de matriz no coincide.

Usted puede hacer:

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

Pero no se puede hacer:

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

Por lo que es la optimización prematura :)

4

De lo contrario no se puede pasar en Object[].

+1

@BalusC ¿Alguna vez hay una situación en la que pasarías para ordenar una matriz de Objetos que no sabías que estaban implementando 'Comparable'? Cualquier uso del método de clasificación será por objetos que sean 'Comparables'. Parece que la única razón para aceptar 'Object []' es que 'Object' se usa con más frecuencia y es más familiar, y como dijo ZeissS, de lo contrario tendríamos que emitir. –

+5

Todavía hay muchos métodos similares a 'toArray()' en la API de Java que devuelve 'Object []'. – BalusC

+1

Podrían estar implementando 'Comparador ', que es similar, pero no es lo mismo que 'Comparable ' – chama

Cuestiones relacionadas