Java—如何使用相同的名称但不同的参数循环方法
我有一个名为ComplexValidator的类,它扩展了absract类验证器,它有两个方法:Java—如何使用相同的名称但不同的参数循环方法,java,Java,我有一个名为ComplexValidator的类,它扩展了absract类验证器,它有两个方法: Validate(Part part); getAnswer(): 我也有验证器,让我们把它们命名为A、B、C和D 所以 我没有在我的代码前面,所以我将使用伪代码 CValidator使用的参数与其他参数不同,B和D使用part获取文件名等,但CValidator使用numberOfFiles(在循环中增加(对于part p:multipart)因此,每次重复循环后,numberOfFiles都会
Validate(Part part);
getAnswer():
我也有验证器,让我们把它们命名为A、B、C和D
所以
我没有在我的代码前面,所以我将使用伪代码
CValidator使用的参数与其他参数不同,B和D使用part获取文件名等,但CValidator使用numberOfFiles(在循环中增加(对于part p:multipart)
因此,每次重复循环后,numberOfFiles都会增加,以便我可以将其与maxNumberOfFiles字段进行比较)
遗憾的是,我不知道如何创建一个抽象类,这个抽象类将向方法提供任何参数,所以所有方法都必须参与。Cvalidator不使用它,我必须使字段numberOfFiles为静态,以便访问它
有没有办法使这些验证器不使用参数,而不使用静态参数?
有没有办法使抽象类成为子类能够改变其参数的方式?
如果需要其他参数,当我有:
List <Validator> validators = new ArrayList<>();
您可能希望使用java反射。使用
类
可以getMethods
并循环遍历每个方法的方法和getParameterTypes
,或者如果事先知道希望使用的方法的类型,可以getMethod
(不带s)并提供类型数组
在您的情况下,我将转到第一个方法,并根据第二个参数(文件数)的存在情况,
以良好的方式调用该方法(使用所有需要的参数)。您可能希望使用java反射。使用类
可以getMethods
并循环遍历每个方法的方法和getParameterTypes
,或者如果事先知道希望使用的方法的类型,可以getMethod
(不带s)并提供类型数组
在您的情况下,我将转到第一个方法,根据第二个参数(文件数)的存在,以良好的方式调用该方法(使用所有需要的参数)。重写方法的参数类型必须与原始方法相同
为了解决您的问题,我将创建一个自定义类,它封装您可能希望传递给validate函数的所有不同参数
诸如此类
class Wrapper{
Part param1;
File param2;
File param3;
}
class Validator{
void validate (Wrapper wrapper);
}
class ValidatorA extends Validate{
void validate (Wrapper wrapper){
//use wrapper.part...
}
}
class ValidatorC extends Validate{
void validate (Wrapper wrapper){
//use wrapper.file...
}
}
重写方法的参数类型必须与原始方法相同
为了解决您的问题,我将创建一个自定义类,它封装您可能希望传递给validate函数的所有不同参数
诸如此类
class Wrapper{
Part param1;
File param2;
File param3;
}
class Validator{
void validate (Wrapper wrapper);
}
class ValidatorA extends Validate{
void validate (Wrapper wrapper){
//use wrapper.part...
}
}
class ValidatorC extends Validate{
void validate (Wrapper wrapper){
//use wrapper.file...
}
}
请等待,直到您可以发布代码,然后再发布。请等待,直到您可以发布代码,然后再发布。我强烈建议尽可能远离反射。我同意,但在这种情况下,调用方法似乎并没有“过度”地完成。对于这个问题,反射是一个完美有效的答案,而不是所有方法都有虚拟参数,这对我来说是一个糟糕的设计。我强烈建议尽可能远离反射。我同意,但在这种情况下,调用方法似乎并没有“过度”地完成。反射是这个问题的一个完美有效的答案,而不是所有方法都有虚拟参数,这对我来说是一个糟糕的设计。我会尽快尝试!谢谢但这让我想知道。包装器的名称正确吗?是有效的包装类吗?从我所读到的内容来看,包装器类用于原语将它们用作对象,那么它的名称是否应该有所不同呢?或者我错了?您可能想将参数包装器
更改为对象。。。参数
;创建一个“名称相同但参数不同”的方法被调用。我需要以相同的方式调用它,这样我就可以循环使用它,所以重载不是答案。给定的类工作得很好——我只是想使用包装器名称是否正确?Binkan Salaryman提供的解决方案也很好。无论如何,包装器类包装了传递给方法的参数,因此包装器可能是一个合理的名称。我会尽快尝试!谢谢但这让我想知道。包装器的名称正确吗?是有效的包装类吗?从我所读到的内容来看,包装器类用于原语将它们用作对象,那么它的名称是否应该有所不同呢?或者我错了?您可能想将参数包装器
更改为对象。。。参数
;创建一个“名称相同但参数不同”的方法被调用。我需要以相同的方式调用它,这样我就可以循环使用它,所以重载不是答案。给定的类工作得很好——我只是想使用包装器名称是否正确?Binkan Salaryman提供的解决方案也很好。无论如何,包装器类包装传递给方法的参数,因此包装器可以是一个合理的名称
class Wrapper{
Part param1;
File param2;
File param3;
}
class Validator{
void validate (Wrapper wrapper);
}
class ValidatorA extends Validate{
void validate (Wrapper wrapper){
//use wrapper.part...
}
}
class ValidatorC extends Validate{
void validate (Wrapper wrapper){
//use wrapper.file...
}
}