I'm using Java 1.5 with a code checker named PMD. It is complaining
about the following method ...
private static Date parse(final String dateStr, final String
dateFormat) {
Date date = null;
try {
final DateFormat sdf = new SimpleDateFormat(dateFormat,
Locale.getDefault());
date = sdf.parse(dateStr);
} catch (Exception e) {
LOGGER.error("Could not parse time:" + dateStr, e);
}
return date;
} // parse
specifically, complaining about the fact that the variable "Date date
= null" is redefined -- first set to null and then later set to a new
value (Found 'DD' anomaly for variable date). Yes, quite a bizarre
warning, but do you know how to rewrite the above to preserve the
functionality while not redefining the variable?
Thanks, - Dave
private static Date parse(
final String date, final String format) {
try {
final DateFormat df = new SimpleDateFormat( format );
return df.parse( date );
}
catch (Exception e) {
LOGGER.error("Could not parse time:" + dateStr, e);
}
}
--
Lew
I'm not convinced it needs fixing. It seems like a common enough idiom
that the checker is what needs fixing. But, here are a couple of
variations that ought to work:
private static Date parse(
final String dateStr,
final String dateFormat)
{
Date date;
try
{
final DateFormat sdf =
new SimpleDateFormat(dateFormat, Locale.getDefault());
date = sdf.parse(dateStr);
}
catch (Exception e)
{
LOGGER.error("Could not parse time:" + dateStr, e);
date = null;
}
return date;
} // parse
Or:
private static Date parse(
final String dateStr,
final String dateFormat)
{
try
{
final DateFormat sdf =
new SimpleDateFormat(dateFormat, Locale.getDefault());
return sdf.parse(dateStr);
}
catch (Exception e)
{
LOGGER.error("Could not parse time:" + dateStr, e);
}
return null;
} // parse
Pete
The initialization seems superfluous: just pass a new ParsePosition()
to sdf.parse(). As long as dateStr is not null and dateFormat is
well-formed, there's no exception to catch. Alternatively, you can move
the initialization to a finally clause, but you should probably catch
specific exceptions. In addition, consider using the SimpleDateFormat
constructor that uses the default locale. Finally, note that DD is not
an indisputable data flow anomaly:
<http://pmd.sourceforge.net/rules/controversial.html>
--
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>
return sdf.parse(dateStr);
}
According to the javadoc for SimpleDateFormat.parse(String), it
returns null in case of error, so no exception handling is needed.
--
Jim Janney
Doubly wrong. SimpleDateFormat.parse(String, ParsePosition) returns
null, but DateFormat.parse(String) throws a ParseException. Worse,
the constructor for SimpleDateFormat throws an IllegalArgumentException
if the date format is invalid.
--
Jim Janney
Jukka Lahtinen wrote:
> I think you should add
> return null;
> to the catch block.
>
Good call. Or one could throw a wrapper exception. One should also
not catch 'Exception' but specific exceptions.
--
Lew