java-循环中的变量对象属性

java-循环中的变量对象属性,java,Java,我知道如何用PHP实现这一点,所以我希望我也能用Java实现。 以下是我的一些Java代码: String curYear = form.getCurYear(); if(curYear == null || curYear.length() == 0 || !curYear.matches(decimalRegex)) { errors.rejectValue("curYear", "supplier.curYear.invalid", "Invalid format for dollar

我知道如何用PHP实现这一点,所以我希望我也能用Java实现。 以下是我的一些Java代码:

String curYear = form.getCurYear();
if(curYear == null || curYear.length() == 0 || !curYear.matches(decimalRegex)) {
  errors.rejectValue("curYear", "supplier.curYear.invalid", "Invalid format for dollar amount");
}

String lastYear = form.getLastYear();
if(lastYear == null || lastYear.length() == 0 || !lastYear.matches(decimalRegex)) {
  errors.rejectValue("lastYear", "supplier.lastYear.invalid", "Invalid format for dollar amount");
}
这两个块之后是几个几乎相同的块,其中只有变量名/字符串发生变化。所以我想创建一个for(或foreach)循环,使用一个变量名数组来创建所有这些。但是对于
form.getCurYear()
code,变量名(curYear)的第一个字符是大写的,所以我需要事先构造变量名。非常简单:
String capField=inputField.substring(0,1).toUpperCase()+inputField.substring(1)


现在如何在表单属性调用中使用该变量名?我知道
form.capField()
不起作用。这可能吗?

在Java中,变量名仅在编译时可用。一种方法是使用名为键的
Map
。您还可以使用类创建解决方案。

在Java中,变量名仅在编译时可用。一种方法是使用名为键的
Map
。您还可以使用类创建解决方案。

您可以这样做

    Map<String,String> map = new HashMap<String,String>();

    map.put("curYear", form.getCurYear());      
    map.put("lastYear", form.getLastYear());

    for (Map.Entry<String, String> entry : map.entrySet()) {
        String key = entry.getKey();
        String value = entry.getValue();

        if(value == null || value.length() == 0 || !value.matches(decimalRegex)) {
              errors.rejectValue(key, "supplier"+key+".invalid", "Invalid format for dollar amount");
        }          
    }
Map Map=newhashmap();
map.put(“curYear”,form.getCurYear());
map.put(“lastYear”,form.getLastYear());
对于(Map.Entry:Map.entrySet()){
String key=entry.getKey();
字符串值=entry.getValue();
if(value==null | | value.length()==0 | |!value.matches(decimalRegex)){
错误。拒绝值(键,“供应商”+键+”。无效,“美元金额格式无效”);
}          
}
这将创建名称和值的映射,并使用值进行检查,使用名称进行打印。

您可以这样做

    Map<String,String> map = new HashMap<String,String>();

    map.put("curYear", form.getCurYear());      
    map.put("lastYear", form.getLastYear());

    for (Map.Entry<String, String> entry : map.entrySet()) {
        String key = entry.getKey();
        String value = entry.getValue();

        if(value == null || value.length() == 0 || !value.matches(decimalRegex)) {
              errors.rejectValue(key, "supplier"+key+".invalid", "Invalid format for dollar amount");
        }          
    }
Map Map=newhashmap();
map.put(“curYear”,form.getCurYear());
map.put(“lastYear”,form.getLastYear());
对于(Map.Entry:Map.entrySet()){
String key=entry.getKey();
字符串值=entry.getValue();
if(value==null | | value.length()==0 | |!value.matches(decimalRegex)){
错误。拒绝值(键,“供应商”+键+”。无效,“美元金额格式无效”);
}          
}

这将创建名称和值的映射,并使用值进行检查,使用名称进行打印。

您可以通过Java 8供应商执行以下操作:

validate(form::getCurYear, "curYear", decimalRegex, errors);
validate(form::getLastYear, "lastYear", decimalRegex, errors);
private static void validate(Supplier<String> method, String name, String decimalRegEx, Errors errors) {
    String val = method.get();
    if (val==null || val.length()==0 || !val.matches(decimalRegEx)) {
        errors.rejectValue(name, "supplier." + name + ".invalid", "Invalid format for dollar amount");
    }
}
您的验证方法可以如下所示:

validate(form::getCurYear, "curYear", decimalRegex, errors);
validate(form::getLastYear, "lastYear", decimalRegex, errors);
private static void validate(Supplier<String> method, String name, String decimalRegEx, Errors errors) {
    String val = method.get();
    if (val==null || val.length()==0 || !val.matches(decimalRegEx)) {
        errors.rejectValue(name, "supplier." + name + ".invalid", "Invalid format for dollar amount");
    }
}
private static void validate(供应商方法、字符串名称、字符串小数正则表达式、错误){
String val=method.get();
如果(val==null | | val.length()==0 | |!val.matches(decimalRegEx)){
错误。拒绝值(名称,“供应商”+“名称+”.invalid”,“美元金额格式无效”);
}
}

您可以将
decimalRegex
errors
声明为全局或类成员,以缩短
validate

的签名。您可以让Java 8供应商执行以下操作:

validate(form::getCurYear, "curYear", decimalRegex, errors);
validate(form::getLastYear, "lastYear", decimalRegex, errors);
private static void validate(Supplier<String> method, String name, String decimalRegEx, Errors errors) {
    String val = method.get();
    if (val==null || val.length()==0 || !val.matches(decimalRegEx)) {
        errors.rejectValue(name, "supplier." + name + ".invalid", "Invalid format for dollar amount");
    }
}
您的验证方法可以如下所示:

validate(form::getCurYear, "curYear", decimalRegex, errors);
validate(form::getLastYear, "lastYear", decimalRegex, errors);
private static void validate(Supplier<String> method, String name, String decimalRegEx, Errors errors) {
    String val = method.get();
    if (val==null || val.length()==0 || !val.matches(decimalRegEx)) {
        errors.rejectValue(name, "supplier." + name + ".invalid", "Invalid format for dollar amount");
    }
}
private static void validate(供应商方法、字符串名称、字符串小数正则表达式、错误){
String val=method.get();
如果(val==null | | val.length()==0 | |!val.matches(decimalRegEx)){
错误。拒绝值(名称,“供应商”+“名称+”.invalid”,“美元金额格式无效”);
}
}

您可以将
decimalRegex
errors
声明为全局或类成员,以便在仔细查看代码后缩短
validate

@dmikester1的签名,你也应该考虑把重复的代码放入一个你可以用不同的值调用的方法。所以我的方法会是这样的吗?code>private static checkField(String input,String capInput)
@dmikester1是的,类似的东西可能会起作用。然后我遇到了相同的问题:如何调用
form.capInput()
?@dmikester1我不明白。什么是
表单
?如何申报?当你仔细查看你的代码后,你应该考虑把重复代码放进一个你可以用不同的值调用的方法。所以我的方法会是这样的吗?code>private static checkField(String input,String capInput)@dmikester1是的,类似的东西可能会起作用。然后我遇到了相同的问题:如何调用
form.capInput()
?@dmikester1我不明白。什么是
表单
?如何申报?
capInput()
做什么?为什么这里需要HashMap?最好将字符串放在两个数组中,并在一个数组中循环。对于数组,如果我们有20个变量,我必须手动计数,在那里我必须放置键和值。没有得到要点。键检索值时需要HashMap。为什么这里需要HashMap?最好将字符串放在两个数组中,并在一个数组中循环。对于数组,如果我们有20个变量,我必须手动计数,在那里我必须放置键和值。没有得到要点。按键检索值时需要HashMap。