2011-05-16 6 views
0

오류 :왜 내 컴파일러가 이것을 변환 할 수 없습니까?

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; 
     } 
    } 

답변

0

@JustinKSU 와일드 카드 변경에 대한 올바른 (?) arg (T) 타입으로 변환한다. 또 다른 문제는 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; 
} 
1

나는 문제가 당신의 beanType 변수의 유형 설정과 일치하는지 모르는 컴파일러라고 생각합니다. 이런 식으로 뭔가를 시도

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

그런 변화 (코드는 조금 불통해야 할 수도 있습니다) :

final Set<ConstraintViolation<Class<?>>> 

final Set<ConstraintViolation<Class<T>>> 
+0

문제가 해결되지 않으면, 단지 와 "클래스 "를 교체해보십시오 – JustinKSU

관련 문제