1

エラー:

Type mismatch: cannot convert from Set<ConstraintViolation<capture#1-of ?>> to Set<ConstraintViolation<Class<?>>>

私のコード:

public class validateValue(Class<?> beanType, String propertyName, Object value, Class<?>... groups){
    TraversableResolver tr = new MyTraversableResolver(); 
    Validator validator = Validation.buildDefaultValidatorFactory().usingContext().traversableResolver(tr).getValidator();
    final Set<ConstraintViolation<Class<?>>> constraintViolations = validator.validateValue(beanType, propertyName, value, groups);
}

private class MyTraversableResolver  implements TraversableResolver {

    public boolean isReachable(Object traversableObject, Path.Node traversableProperty, Class<?> rootBeanType, Path pathToTraversableObject, ElementType elementType) {
      return traversableObject == null || Hibernate.isInitialized(traversableObject);
      }
      public boolean isCascadable(Object traversableObject, Path.Node traversableProperty, Class<?> rootBeanType, Path pathToTraversableObject, ElementType elementType) {
          return true;
      }
  }
4

2 に答える 2

1

問題は、beanType 変数の型がセットと一致することをコンパイラが認識していないことだと思います。このようなことを試してください(コードを少し調整する必要があるかもしれません)

public <T> class validateValue(Class<T> beanType, String propertyName, Object value, Class<?>... groups)

次に変更:

 final Set<ConstraintViolation<Class<?>>>

 final Set<ConstraintViolation<Class<T>>>
于 2011-05-16T23:28:14.227 に答える
0

@JustinKSUは、ワイルドカード(?)をタイプarg(T)に変更することについて正しいです。もう1つの問題はvalidator.validateValue(Class<T> beanType, String propertyName, Object value, Class<?>... groups)、タイプのクラスに対する一連の制約違反が返されないことです。これは次のようになります。

Set<ConstraintViolation<Class<T>>>

...むしろ、次のタイプの一連の制約違反を返します。

Set<ConstraintViolation<T>>

見るのは微妙な違いですが、エラーメッセージを注意深くチェックし、山かっこを数えると目立ちます。

したがって、コードは次のようになります。例のために、バリデーターの作成を簡略化しました。結果を使って何かしたいと思うので、戻り値も追加しました。

public <T> Set<ConstraintViolation<T>> validateValue(Class<T> beanType, String propertyName, Object value, Class<?>... groups) {
    Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
    final Set<ConstraintViolation<T>> constraintViolations = validator.validateValue(beanType, propertyName, value, groups);
    return constraintViolations;
}
于 2011-05-17T00:15:58.113 に答える