javax.swing.JFormattedTextField.AbstractFormatter.stringToValue(String)的具体实现

时间:2017-12-21 09:37:35

标签: java swing exception-handling

我提供了一个具体的实现:

在我的情况下,我需要处理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,或者我错过了一些明显可以将一个例外转换为另一个例外的内容?

1 个答案:

答案 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);
  }