Java—如何使用相同的名称但不同的参数循环方法

Java—如何使用相同的名称但不同的参数循环方法,java,Java,我有一个名为ComplexValidator的类,它扩展了absract类验证器,它有两个方法: Validate(Part part); getAnswer(): 我也有验证器,让我们把它们命名为A、B、C和D 所以 我没有在我的代码前面,所以我将使用伪代码 CValidator使用的参数与其他参数不同,B和D使用part获取文件名等,但CValidator使用numberOfFiles(在循环中增加(对于part p:multipart)因此,每次重复循环后,numberOfFiles都会

我有一个名为ComplexValidator的类,它扩展了absract类验证器,它有两个方法:

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