繁体   English   中英

类是原始类型。 对泛型类型Class的引用 <T> 应该参数化

[英]Class is a raw type. References to generic type Class<T> should be parameterized

我有以下课程(来自简单的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类。

如果我尝试向其中添加参数,则supports方法显示警告(Class是原始类型。应泛型引用Class类型的引用)

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隐藏问题!

接口使用原始类型声明该方法。 在这种情况下,没有警告就无法很好地覆盖它。

问题的根源是Spring接口被声明为符合Java 1.4。 请注意,Spring 3.0应该提供与Java 1.5兼容的所有类,这样可以解决您的问题。 升级之前,我想您将不得不接受警告或@SuppressWarning

由于该接口会强制您使用原始类型(即,不允许您指定正确的类型信息),因此除非您使用@SupressWarnings否则无法在没有警告的情况下实现它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM