小编edm*_*pie的帖子

所需的 ? 类型捕获,前提是 T

为什么调用会val.isValid(request)出现编译错误Required: type capture of ?, provided: T
我该如何修复该错误?

public class RequestValidator implements IRequestValidator{
    private Map<Class<?>, IValidator<?>> validatorMap;

    public RequestValidator() {
        validatorMap = new HashMap<>();
    }

    @Override
    public <T> void registerValidator(Class<T> clazz, IValidator<T> validator) {
        validatorMap.put(clazz, validator);
    }

    @Override
    public <T> boolean validate(T request) {
        if (validatorMap.containsKey(request.getClass())) {
             IValidator<?> val = validatorMap.get(request.getClass());
             return val.isValid(request);
        }

        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

IValidator界面:


public interface IValidator<T> {
    boolean isValid(T t);
}

Run Code Online (Sandbox Code Playgroud)

java generics

9
推荐指数
1
解决办法
2万
查看次数

标签 统计

generics ×1

java ×1