Какой тип исключения я должен генерировать, если передан неправильный тип объекта?
Какой тип исключения я должен генерировать, если в метод compareTo передан неправильный тип объекта?
ClassCastException?
2 ответа
Это было бы IllegalArgumentException
в общем смысле, когда переданное значение не является правильным.
Однако, как показывает ответ @Tom ниже, это также может быть ClassCastException
за неправильные типы. Тем не менее, я еще не сталкивался с кодом пользователя, который делает это.
Но что более важно, если вы используете compareTo
с дженериками это будет ошибка времени компиляции.
Учти это:
public class Person implements Comparable<Person> {
private String name;
private int age;
@Override
public int compareTo(Person o) {
return this.name.compareTo(o.name);
}
}
Где вы видите возможность передачи неправильного типа в приведенном выше примере?
Неудивительно, что документы API указывают исключение, которое будет выброшено в этом случае.
ClassCastException - если тип указанного объекта препятствует тому, чтобы это сравнивалось с этим объектом.
Если вы используете дженерики, вы автоматически получите это исключение, если кто-то попытается вызвать ваши методы, используя необработанные типы, отражения или другие небезопасные методы.