Java中是否存在某种异常以捕获无效的Date对象?我试图在以下方法中使用它,但我不知道要查找什么类型的异常。是ParseException。
public boolean setDate(Date date) {
this.date = date;
return true;
}
答案 0 :(得分:3)
在您提供的方法中,无法捕获异常,因为简单赋值不会抛出任何异常。您所能做的就是以下变化:
if(date == null) return false;
但即便如此也不优雅。您可能希望对this.date
执行某些操作,或者如果这是所需行为,则抛出异常。
你真正想要的是:
ParseException
- DateFormat
对象在尝试parse()
时抛出,这将在您的set方法之前发生IllegalArgumentException
- 由SimpleDateFormat
构造函数抛出,同样会在set方法之前发生。表示您提供了无效的格式字符串。你想要抓住其中一个(可能是#1)。但是必须在之前进行方法调用。获得Date
个对象后,该对象为null
或有效。
答案 1 :(得分:3)
这可能与原始问题无关。但是您必须注意方法名称,即setDate()
。你觉得它听起来会回归吗?或者如果可能,那么你认为在那里返回boolean
是个好主意吗? IMO,做这样的事情,
public void setDate(Date date) {
this.date = date;
}
public boolean isDateNull() { // or something
return this.date == null;
}
答案 2 :(得分:2)
在此方法中,无需担心异常。您进入此方法时已创建日期。如果您正在解析日期,那么它将在此代码之外完成。您可以做的最好的事情是确保日期不为空。
答案 3 :(得分: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。