gpt4 book ai didi

java - 更正 ClassToInstanceMap 的泛型类型

转载 作者:行者123 更新时间:2023-11-29 05:54:08 26 4
gpt4 key购买 nike

我需要实现 ContraintValidatorFactory 接口(interface),它是 jsr303 的一部分

public interface ConstraintValidatorFactory {

/**
* @param key The class of the constraint validator to instantiate.
*
* @return A constraint validator instance of the specified class.
*/
<T extends ConstraintValidator<?,?>> T getInstance(Class<T> key);
}

我的实现是

private static class InstanceAwareConstraintValidatorFactory implements ConstraintValidatorFactory {

private ClassToInstanceMap<ConstraintValidator> instances = MutableClassToInstanceMap.create();

@SuppressWarnings("unchecked")
@Override
public <T extends ConstraintValidator<?, ?>> T getInstance(Class<T> key) {
if(instances.containsKey(key)) {
return (T) instances.get(key);
}
return ReflectionHelper.newInstance(key, "ConstraintValidator");
}

public void addContraintValidation(ConstraintValidator constraintValidator) {
instances.put(constraintValidator.getClass(), constraintValidator);
}

public void addContraintValidations(Set<ConstraintValidator<?, ?>> constraintValidators) {
for(ConstraintValidator<?,?> constraintValidator : constraintValidators) {
instances.put(constraintValidator.getClass(), constraintValidator);
}
}
}

如何在我的实现中删除 @SuppressWarnings("unchecked")。您可以自由修改 InstanceAwareConstraintValidatorFactory

换句话说,我需要使用正确的通用参数来提供与我的 ClassToInstanceMap 和接口(interface)的 getIntance 方法的契约(Contract)。

这可能吗?

最佳答案

您可以替换以下行,

return (T) instances.get(key);

return instances.getInstance(key);

我验证了 guava 11有这个功能。

关于java - 更正 ClassToInstanceMap 的泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12814952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com