Какой тип исключения я должен генерировать, если передан неправильный тип объекта?

Какой тип исключения я должен генерировать, если в метод 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 - если тип указанного объекта препятствует тому, чтобы это сравнивалось с этим объектом.

Если вы используете дженерики, вы автоматически получите это исключение, если кто-то попытается вызвать ваши методы, используя необработанные типы, отражения или другие небезопасные методы.

Другие вопросы по тегам