类是一个原始types。 genericstypes<T>的引用应该被参数化

我有以下类(从简单的Spring教程)

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类。

支持方法显示警告(类是一个原始types。generics类的引用应该被参数化),如果我尝试添加参数,如

 public boolean supports(Class<?> aClass) ... 

我得到以下错误:

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

关于这种types的问题有很多线索,但我想得到一个完整的答案,并实际了解它,而不用“隐藏” @SupressWarnings的问题!

接口用原始types声明方法。 在这种情况下,您不能很好地覆盖它,而不会有警告。

问题的根源在于Spring接口被声明为符合Java 1.4标准。 请注意,Spring 3.0应该将所有类作为Java 1.5兼容,以便解决您的问题。 升级之前,我想你将不得不忍受警告或@SuppressWarning

由于界面强制您使用原始types(即不允许您指定正确的types信息),除非使用@SupressWarnings否则不能在没有警告的情况下实现它。

唯一真正的解决办法是修复接口(即使其定义boolean supports(Class<?> aClass) )。