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;
}