java类是原始类型。对泛型类型类<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!");
}
}
}
}
其中,验证器类是Spring2.5中的org.springframework.validation.Validator
类
supports方法显示警告(类是原始类型。对泛型类型类的引用应该参数化),如果我尝试向其中添加参数,例如
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
关于这类问题有很多线索,但我想得到一个完整的答案并真正理解它,而不是用@SupressWarnings
来“隐藏”问题
# 1 楼答案
接口用原始类型声明方法。在这种情况下,如果没有警告,就无法很好地覆盖它
问题的根源在于Spring接口被声明为兼容Java1.4。 请注意,Spring3.0应该提供符合Java1.5的所有类,这样可以解决您的问题。在升级之前,我想您必须接受警告或
@SuppressWarning
# 2 楼答案
由于接口强制您使用原始类型(即,不允许您指定正确的类型信息),因此除非您使用
@SupressWarnings
,否则无法在没有警告的情况下实现它唯一真正的修复方法是修复接口(即使其定义
boolean supports(Class<?> aClass)
)