?、提供さTの必要なタイプのキャプチャ

edmundpie:

なぜ呼び出しはない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;
    }
}

IValidator インターフェース:


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

Schred:

おそらく、これはどのようにある意味、この場合にはキャストの周りを取得するつもりはないvalidate方法は、次のようになります。

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

    return true;
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=345171&siteId=1