我提供了一个具体的实现:
在我的情况下,我需要处理java.time.LocalTime
,所以我最初写道:
@Override
public Object stringToValue(String text) throws ParseException {
return LocalTime.parse(text);
}
事实证明,我实际上需要自己转换异常:
@Override
public Object stringToValue(String text) throws ParseException {
try {
return LocalTime.parse(text);
} catch (DateTimeParseException e) {
// API expect a ParseException to report an error in conversion
// need to cast DateTimeParseException into ParseException
throw new ParseException(e.getParsedString(), e.getErrorIndex());
}
}
我想知道是否有更简单的方法可以将java.time.format.DateTimeParseException
转换为java.text.ParseException
,或者我错过了一些明显可以将一个例外转换为另一个例外的内容?
答案 0 :(得分:1)
如果我理解了您可能能够使用Throwable#initCause(Throwable)
方法的问题。
Throwable#initCause(Throwable) (Java Platform SE 8)
将此throwable的原因初始化为指定值。 (原因是导致抛出此抛掷物的抛掷物。) 此方法最多可以调用一次。它通常在构造函数内调用,或者在创建throwable之后立即调用。如果使用Throwable(Throwable)或Throwable(String,Throwable)创建此throwable,则此方法甚至不能被调用一次。
@Override
public Object stringToValue(String text) throws ParseException {
try {
return ...;
} catch (DateTimeParseException ex) {
throw (ParseException) new ParseException(
ex.getMessage(), ex.getErrorIndex()).initCause(ex);
}