2017-12-21 20 views
1

私は具体的な実装を提供しています:私は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.text.ParseExceptionjava.time.format.DateTimeParseExceptionを変換するためにシンプルなものがあるかどうか、私は疑問に思って、または私は他の1つの例外をキャストするために明らかに何かが足りないのですか?

答えて

1

私が質問を理解した場合、Throwable#initCause(Throwable)メソッドを使用することができます。

Throwable#initCause(Throwable) (Java Platform SE 8)

指定された値に対するこのThrowableの原因を初期化します。 (原因は、このスロー可能オブジェクトがスローされるスロー可能オブジェクトです。) このメソッドは、最大で1回呼び出すことができます。これは一般に、コンストラクタ内から、またはスロー可能オブジェクトを作成した直後から呼び出されます。このThrowableがThrowable(Throwable)またはThrowable(String、Throwable)で作成された場合、このメソッドは一度呼び出すことはできません。確かに

@Override 
public Object stringToValue(String text) throws ParseException { 
    try { 
    return ...; 
    } catch (DateTimeParseException ex) { 
    throw (ParseException) new ParseException(
     ex.getMessage(), ex.getErrorIndex()).initCause(ex); 
    } 
+0

わずかに良い、私はまだセットアップコンプレックスを見つけます... – malat

関連する問題