我有一个像责任链模式这样的实现,其中常见的上下文有方法
Object getVariable(String name)
当我从上下文中获取对象时,我想用适当的验证器验证它。验证器界面:
public interface PageValidator<DTO> {
ValidationResult validate(DTO dto);
}
所以,当我尝试做验证时
Object dtoForValidation = getDtoForValidation(delegateExecution);
ValidationResult validationResult = getPageValidator(delegateExecution).validate(dtoForValidation);
它因编译错误而失败
incompatible types: java.lang.Object cannot be converted to capture#1 of ?
所以,我想问一下设计它的正确方法是什么? (我真的不想让验证器接受Object作为输入参数,因为它看起来很难看)
答案 0 :(得分:0)
在我的头顶,您可以执行以下操作之一。
1)修改您的getDtoForValidation
方法以返回DTO
2)使用ValidationResult validationResult = getPageValidator(delegateExecution).validate((DTO)dtoForValidation);
3)您提到您不希望验证器接受Object作为输入参数,但您可以这样做,并且在验证器中,首先检查对象类型。
答案 1 :(得分:0)
我的建议是改变方法getValiable(String name)
。您可以将Class<T> varClass
传递给此方法。你的签名将是这样的:
<T> T getVariable(String name, Class<T> varClass);
如果将此方法放在第三方库中,我建议您为此类创建一些包装器。
class Wrapper {
private OriginalClass originalObject;
<T> T getVariable(String name, Class<T> varClass) {
return (T) originalObject.getVariable(name);
}
}