Вопрос

Есть ли какое-то исключение в Java для перехвата недопустимого объекта Date?Я пытаюсь использовать его в следующем методе, но не знаю, какой тип исключения искать.Это исключение ParseException.

public boolean setDate(Date date) {
        this.date = date;                
        return true;
    }
Это было полезно?

Решение

В предоставленном вами методе нет возможности перехватить исключение, поскольку при простом присваивании оно не будет создано.Все, что вы можете сделать, это, возможно, внести следующие изменения:

if(date == null) return false;

Но даже это не изящно.Возможно, вы захотите что-то сделать с this.date или выдать исключение, если это желаемое поведение.

То, что вы действительно ищете, это либо:

  1. ParseException - брошенный DateFormat объект, когда он пытается parse(), что произойдет до того, как ваш метод set
  2. IllegalArgumentException - брошенный SimpleDateFormat конструктор, опять же, это произойдет до вашего метода set.Указывает, что вы указали неверную строку формата.

Вам бы хотелось поймать одного из них (вероятно, №1).Но это должно произойти до вызов вашего метода.Как только у вас появится Date объект, это либо null или действительный.

Другие советы

Это может быть не связано с исходным вопросом.Но вы должны обратить внимание на имя метода, которое setDate().Как вы думаете, похоже, что он что-то вернет?А если и возможно, то, по вашему мнению, это хорошая идея — вернуть boolean там?ИМХО, сделай что-нибудь вроде этого,

public void setDate(Date date) {
    this.date = date;                
}

public boolean isDateNull() { // or something
    return this.date == null;                
}

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

Это зависит от того, что вы подразумеваете под неверной датой.Вы хотели дать нам сигнатуру метода, которая выглядела бы примерно так?

public void setDate(String date) throws ParseException {
   this.date = SomeDateFormat.getInstance().format(date);
}

В противном случае, как утверждали другие, простое действие по присвоению объекта даты Java полю не должно быть исключительным, поскольку оно либо уже является экземпляром Date, либо имеет значение null.

Если вы просто пытаетесь проанализировать строку в java.util.Date, посмотрите Формат даты, FastDateFormat (apache, потокобезопасный) или Joda Time.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top