Обработка исключений даты Java try catch - PullRequest
0 голосов
/ 25 марта 2010

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

public boolean setDate(Date date) {
        this.date = date;                
        return true;
    }

Ответы [ 4 ]

3 голосов
/ 25 марта 2010

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

if(date == null) return false;

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

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

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

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

3 голосов
/ 25 марта 2010

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

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

public boolean isDateNull() { // or something
    return this.date == null;                
}
2 голосов
/ 25 марта 2010

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

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

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

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

2 голосов
/ 25 марта 2010

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

...