Return 一个字符串的方法数组

Array Of Methods That Return A String

我正在创建一种数据测试程序,一个特定的部分给我带来了很多麻烦。在我的主要方法 class 中有一个部分,我需要将一个数据字符串作为方法中的参数发送到我的方法 class (我们称它为 ValidatorClass),我的想法是该方法然后 return 任何验证错误,或者如果 none 只是一个空字符串。

这很好,只是我在检查数据时使用 "for loops" 进行验证,因为不这样做太笨重了。我试图研究方法数组,发现了很多与 void 方法一起使用的有用的东西,但在 return 变量的任何方法上都没有发现任何东西。

简而言之,我要问:是否可以创建一个方法数组(或实现一个对象数组来模拟一个方法数组)return 一个变量?

这是一些示例代码,但在实际程序中,方法的 return 实际上会进一步使用:

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));

那么也许你可以写一个接口:

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)如果这更适合您的目的。