我正在创建一种数据测试程序,一个特定的部分给我带来了很多麻烦。在我的主要方法类中有一个部分,我需要将一个数据字符串作为方法中的参数发送到我的方法类(我们称之为 ValidatorClass),并且想法是该方法然后将返回任何验证错误,或者如果没有一个只是空字符串。
这很好,除非我在检查数据时使用“for 循环”来验证,因为不这样做太笨重了。我尝试研究方法数组,发现了很多适用于 void 方法的有用内容,但在任何返回变量的方法中一无所获。
简而言之,我要问的是:是否可以创建返回变量的方法数组(或实现对象数组来模拟方法数组)?
下面是一些示例代码,但在实际程序中,该方法的返回实际上会进一步使用:
public class Validation{
public static void main(String args){
ValidatorClass valTest = new ValidatorClass();
String[] dataList = {"Andrew", "Jameson", "Male"}
for(int i = 0; i < dataList.length; i++){
String errors = valTest.testInput(dataList[i], i).validationList[i];
System.out.println(errors);
}
}
}
在 ValidatorClass 中:
public class ValidatorClass{
public String testInput(String data, int index){
//Tests the data by calling method "index" which corresponds to data type.
//ie. validateName would be index : 1, validateSurname index : 2 etc
String errors = validationMethodList[index](data); //Somehow add data as a parameter to it
return errors;
}
public String validateName(String name){
String errors = "";
if(name.length < 1){
errors += "Name Not Entered";
}
return errors;
}
public String validateSurname(String surname){
String errors = "";
if(surname.length < 1){
errors += "Surame Not Entered";
}
return errors;
}
public String validateGender(String gender){
String errors = "";
if(!gender.equalsIgnoreCase("male") || !gender.equalsIngoreCase("female")){
errors += "Invalid Gender";
}
return errors;
}
}
最佳答案
我想你有类似...
static String validate1(Validatible v) { /* do something */ }
static String validate2(Validatible v) { /* do something else */ }
static String validate3(Validatible v) { /* do something still else */ }
并且您想以某种方式执行...
Validatible v = getValidatible();
System.out.println(validate1(v));
System.out.println(validate2(v));
System.out.println(validate3(v));
那么也许你可以写一个接口(interface):
public interface Validator {
String validate(Validatible v);
}
...并将它们保存在数组或列表中...
private static final List<Validator> validators = Arrays.asList(
new Validator() {
@Override
public String validate() {
/* do something */
}
},
new Validator() {
@Override
public String validate() {
/* do something else */
}
},
new Validator() {
@Override
public String validate() {
/* do something still else */
}
}
);
// Can be written more compactly if in Java 8.
之后,您可以在 for 循环中调用这些方法:
Validatible v = getValidatible();
for(Validator validator : validators) {
System.out.println(validator.validate(v));
}
如果这更符合您的目的,可能的改进包括使用 StringBuilder 构建单个字符串(或使用 Stream API 和使用 Collectors.joining)。
关于java - 返回字符串的方法数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29451426/