0

Java 中是否存在某种异常来捕获无效的 Date 对象?我正在尝试在以下方法中使用它,但我不知道要查找哪种类型的异常。它是 ParseException。

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

4 回答 4

3

在您提供的方法中,无法捕获异常,因为简单赋值不会抛出任何异常。您所能做的可能是以下更改:

if(date == null) return false;

但即使这样也不优雅。如果这是所需的行为,您可能想要做某事this.date或抛出异常。

你真正想要的是:

  1. ParseExceptionDateFormat- 当一个对象试图抛出时parse(),它会在你的 set 方法之前发生
  2. IllegalArgumentException- 由SimpleDateFormat构造函数抛出,再次发生在你的 set 方法之前。表示您提供了无效的格式字符串。

你想抓住其中之一(可能是#1)。但这必须在您的方法调用之前发生。一旦你有了一个Date对象,它要么是要么是null有效的。

于 2010-03-25T03:51:02.167 回答
3

这可能与原始问题无关。但是您必须注意方法名称,即setDate(). 你认为它听起来会返回一些东西吗?或者,如果可能,那么您认为返回boolean那里是个好主意吗?IMO,做这样的事情,

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

public boolean isDateNull() { // or something
    return this.date == null;                
}
于 2010-03-25T04:05:08.687 回答
2

在这种方法中,无需担心异常。在您使用此方法时,日期已经创建。如果您正在解析日期,它会在此代码之外完成。您能做的最好的事情是确保日期不为空。

于 2010-03-25T03:47:41.487 回答
2

这取决于您所说的无效日期是什么意思。你的意思是给我们一个看起来更像这样的方法签名吗?

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

否则,正如其他人所说,将 Java 日期对象分配给字段的简单行为不应该是例外,因为它已经是 Date 的实例,或者为 null。

如果您只是想将字符串解析为 java.util.Date,请查看DateFormat、FastDateFormat(apache,线程安全)或 Joda Time。

于 2010-03-25T04:29:29.100 回答