¿Qué tipo de excepción debo arrojar si se pasa el tipo incorrecto de objeto a mi método compareTo?¿Qué tipo de excepción debo arrojar si se pasa el tipo de objeto incorrecto?
ClassCastException?
¿Qué tipo de excepción debo arrojar si se pasa el tipo incorrecto de objeto a mi método compareTo?¿Qué tipo de excepción debo arrojar si se pasa el tipo de objeto incorrecto?
ClassCastException?
Sería IllegalArgumentException
en un sentido general cuando el valor aprobado no es el correcto.
Sin embargo, como @Tom's answer below sugiere, también podría ser ClassCastException
para tipos incorrectos. Sin embargo, todavía tengo que encontrar el código de usuario que hace esto.
Pero más fundamentalmente, si está utilizando el compareTo
con genéricos, será un error de tiempo de compilación.
Considera:
public class Person implements Comparable<Person> {
private String name;
private int age;
@Override
public int compareTo(Person o) {
return this.name.compareTo(o.name);
}
}
¿Dónde se ve la posibilidad de un tipo incorrecto que se pasa en el ejemplo anterior?
+1: Es mejor obtener un tiempo de compilación que un error de tiempo de ejecución. –
¿Por qué el voto a favor? – adarshr
Parece que no está de acuerdo con los documentos de la API que están interesados en 'ClassCastException'. –
Como era de esperar, el API docs especifica la excepción que debe arrojarse en este caso.
ClassCastException - si el tipo de objeto especificado impide que sea comparado con este objeto.
Suponiendo que utiliza genéricos, obtendrá automáticamente esta excepción si alguien intenta llamar a sus métodos utilizando tipos crudos, reflexiones o alguna otra técnica no segura.
No estoy de acuerdo con esto ya que la JVM lanzará 'ClassCastException', donde OP está preguntando por una excepción _que necesitan lanzar. Por lo tanto, estoy a favor de la respuesta 'IllegalArgumentException'. Sin embargo, tal vez sea un tema de lenguaje. – maksimov
@maksimov Los documentos API son muy claros. No está de acuerdo con la especificación del método, que es una posición inusual para tomar. –
Tom, me acabo de dar cuenta de que debo ser ciego. De alguna manera, pude filtrar el 'compareTo' que están implementando.Me gustaría cambiar mi declaración anterior ahora :-) – maksimov
¿Puede mostrarnos su código 'compareTo'? – adarshr
Bueno, eso depende de cómo manejarías esa excepción. Probablemente lanzaría una 'IllegalArgumentException' con un mensaje apropiado. Por cierto, ¿podría haber una manera de no permitir pasar el tipo de objeto incorrecto? ¿Podría explicar el caso de uso? Tal vez podríamos ayudarte a evitar ese control de tiempo de ejecución y utilizar el poder del compilador. Tenga en cuenta que 'Comparable' se puede parametrizar con un tipo de parámetro genérico, por lo tanto' compareTo' puede usar parámetros específicos. – Thomas
Si está realizando un downcast en la implementación de compareTo, obtendrá ese CCE de forma gratuita. ¿Por qué molestarse en tirarlo explícitamente? –