Java解析异常到自定义异常

独立尼克

我是Java的新手,我的问题是一个简单年龄计算器。这是我的代码:

public class Client {
public int findAge(String birthDate) throws InvalidDateFormatException {
//  InvalidDateFormatException is a custom defined

    int age = 0;
    try {
        Calendar past = new GregorianCalendar();
        Calendar present = Calendar.getInstance();
        past.setTime(new SimpleDateFormat("dd-MM-yyyy", Locale.ENGLISH).parse(birthDate));
        age = present.get(Calendar.YEAR) - past.get(Calendar.YEAR); 
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
}
    return (age >= 0) ? age : 0;
}

总的来说,

try {
                System.out.println(c.findAge("08-09-1015"));
            } catch (InvalidDateFormatException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

现在,每次我以错误的格式传递字符串时,都会引发ParseException有什么方法可以使它引发InvalidDateFormatException异常?

另外,如果我遵循正确的编码标准并遵循最佳实践,请对我的代码的样式和质量发表评论。

图那基

要回答您的主要问题,您需要在catch块中抛出自定义异常

try {
    Calendar past = new GregorianCalendar();
    Calendar present = Calendar.getInstance();
    past.setTime(new SimpleDateFormat("dd-MM-yyyy", Locale.ENGLISH).parse(birthDate));
    age = present.get(Calendar.YEAR) - past.get(Calendar.YEAR); 
} catch (ParseException e) {
    throw new InvalidDateFormatException("invalid date: " + birthDate);
}

关于您的代码,我有几点建议:

  • 不要使用new GregorianCalendar()而是喜欢Calendar.getInstance()
  • 计算年龄的方式已被打破:您没有考虑月份和日期(假设我们是2015-09-20,而出生日期是2014-12-01,即使您的代码也会输出1,即使婴儿还不到1岁)。
  • 考虑提供日期参数而不是字符串参数。findAge解析出生日期不是该方法的责任
  • 如果您使用的是Java 8,请考虑使用新的Java Time API。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章