2016-05-29 11 views
0

私のアプリケーションでBeanの検証に関する検証エラーのビルド例外メッセージを手助けするためのユーティリティメソッドを記述しようとしています。Javaジェネリックスのワイルドカードオペレータ

Set<ConstraintViolation<BasicContactInformation>> constraintViolations = validator.validate(basicContactInformation); 
     if(!CollectionUtils.isEmpty(constraintViolations)){ 
      throw new CustomerAccountException(LoggingUtils.getLoggingOutput("Unable to update customer contact information", constraintViolations)); 
     } 

を私は他のBeanのために同じことをやっている:私は私のオブジェクト(この場合は、BasicContactInformation)を検証するために行くとき、次のように私はそれを行います。ユーティリティーメソッドは、制約の検証のセットとともに例外メッセージのプレフィックスを取り、きれいにフォーマットされた出力メッセージを作成します。問題は、どんなタイプの制約違反も受け入れることができるようにメッセージを構築する方法を理解できないということです。それはキャストカント言うように、私は次のことを試してみましたが、それは有効ではないようです。

public static String getLoggingOutput(String prefix, Set<ConstraintViolation<?>> violations){ 
    StringBuilder outputBuilder = new StringBuilder(prefix); 
    if(!CollectionUtils.isEmpty(violations)){ 
     for(ConstraintViolation<?> currentViolation: violations){ 
      outputBuilder.append("["); 
      outputBuilder.append(currentViolation.getMessage()); 
      outputBuilder.append("]"); 
     } 
    } 
    return outputBuilder.toString(); 
} 

これは

The method getLoggingOutput(String, Set<ConstraintViolation<?>>) in the type LoggingUtils is not applicable for the arguments (String, Set<ConstraintViolation<BasicContactInformation>>) 

コンパイルエラーである任意のアイデアをどのようなメソッドのシグネチャがすべきのようそれは制約違反の任意のセットのために働くようになりますか?最も下に

public static <T> String getLoggingOutput(String prefix, 
     Set<ConstraintViolation<T>> violations) { 
    // ... 
} 

:私は

答えて

1

あなたはジェネリックメソッドを作ることができるなどの制約fooの違反、バーに1つずつ、バズのための1つのセットで取る方法を、書き込みを避けるためにしようとしています場合によっては、すべてではないにしても、コンパイラーは引き数から型パラメーターを推論します。これは、ワイルドカードを使用するのと同じことではありません。

関連する問題