2009-09-03 1 views
63

다음 클래스가 있습니다 (간단한 스프링 튜토리얼에서).클래스는 원시 형식입니다. 제네릭 형식 클래스 <T>에 대한 참조는 매개 변수화되어야합니다.

public class CarValidator implements Validator { 

    public boolean supports(Class aClass) { 
     return Car.class.equals(aClass); 
    } 

    public void validate(Object obj, Errors errors) { 
     Car car = (Car) obj; 

     ValidationUtils.rejectIfEmptyOrWhitespace(errors, "model", "field.required", "Required field"); 

     ValidationUtils.rejectIfEmptyOrWhitespace(errors, "price", "field.required", "Required field"); 

     if(! errors.hasFieldErrors("price")) { 
      if (car.getPrice().intValue() == 0) { 
       errors.rejectValue("price", "not_zero", "Can't be free!"); 
      } 
     } 

    } 
} 

Validator 클래스는 Spring 2.5의 org.springframework.validation.Validator 클래스입니다.

와 같은 매개 변수를 추가하려고하면 supports 메소드가 경고를 표시합니다 (Class는 원시 유형입니다. :

The method supports(Class<?>) of type CarValidator has the same erasure as supports(Class) of type Validator but does not override it

이 유형의 질문에 관해 많은 스레드가 있지만 완전한 대답을 얻고 실제로 @SupressWarnings로 문제를 숨기지 않고 이해하고 싶습니다!

+0

+1 질문에 대한 답변과 답변자에 대한 좋은 태도 – KLE

+0

당신이 대답 중 하나를 수락하면 더 많은 점수를 얻을 것입니다 ... – KLE

+0

완료. 다시 많은 감사드립니다. –

답변

32

인터페이스는 메소드를 원시 유형으로 선언합니다. 이 경우 경고 없이는 제대로 무시할 수 없습니다.

문제의 근원은 Spring 인터페이스가 Java 1.4 호환으로 선언되었다는 것입니다. Spring 3.0은 모든 클래스를 Java 1.5 호환으로 제공하기로되어있어 문제를 해결할 수 있습니다. 업그레이드하기 전에 경고 또는 @SuppressWarning 중 하나를 선택해야합니다.

+1

우수 감사합니다. 지금 당장 @SuppressWarning과 함께 살아야 할 것입니다. –

+6

도와 드리겠습니다. 나는 당신이 그 물건을 일하기를 원할뿐 아니라 이해하기를 원한다는 것을 좋아했습니다! 프랑스 남부에서 일자리를 찾을 필요가 있다면 ...-) – KLE

+0

스프링 LDAP이 아직 원시 타입을 고수하고있는 것은 맞습니까? Java 1.5의 핵심 부분에도 불구하고? – AlbeyAmakiir

9

인터페이스가 원시 유형을 사용해야하므로 (올바른 유형 정보를 지정할 수 없음) @SupressWarnings을 사용하지 않으면 경고없이 구현할 수 없습니다.

유일한 실제 해결 방법은 인터페이스를 수정하는 것입니다 (예 : boolean supports(Class<?> aClass)으로 정의).

+0

그래, 지금은 @SuppressWarning으로 살 수 있지만 부울 지원 (Class aClass)으로 바꾼다면 나는 지우개 유형의 세계에 들어간다. 다른 접근법이 있습니까, 아니면 Spring 3.0을 기다리는 것입니까? –

관련 문제