如何定义方法一次并将其用作其他方法的“构建计划”?

时间:2013-12-13 19:25:13

标签: java methods setter getter universal

我是Java的新手并且有以下问题:
是否有更简单的方法为每个变量制作方法?

问题背后的含义是:
我是否必须定义一个与其他方法完全相同的方法,除了它们使用不同的变量名和类型?

我认为具有相同问题的最常见方法是get-和set-accessors:
它们共享相同的结构,唯一的区别是变量类型和名称。

在我的以下示例中,您需要知道:

  
      
  1. 变量varA-varD只表示具有各种类型和名称的多个变量的存在。
  2.   
  3. 变量“inheritor”很特别。我实现继承,但我 DO 必须在某处验证,也许在继承者的继承者中使用相同的变量
      
        
    • 有一个值(“!= null”;如果是Lists,HashMaps,Enumerations等)
        或
    •   
    • 的值不是-2(因为0表示什么都没有,-1表示我的系统中有“无限”,所以我认为使用-2来表示该变量尚未设置,这是一个好主意;万一整数,浮点数,双打等。)。
    •   
  4.   
  5. 我有验证方法......   
        
    • ...检查变量是否已设置(或不)   因此,代码位于
    •   
    • ...在setter之外,因为我必须检查变量,即使它们尚未设置。
    •   
  6.   
public class ExampleClass {

    private int varA;
    private String varB;
    private ExampleEnum varC;
    private List<OtherClass> varD;
    //there are more variables here...

    private ExampleClass inheritor; 

    public int getVarA() {
        return varA;
    }

    public void setVarA(int varA) {
        this.varA = varA;
    }

    public boolean validateVarA() {
        //-2 is "not set" for Integers
        if (varA == -2 && inheritor != null) { 
            return inheritor.getVarA() != -2;
        } else {
            return varA != -2;
        }
    }

    //Do I have to define three methods for each variable?
    //What if I had like 20 variables?!?
    //I would need 60 methods altough every third one
    //shares the same structure.

}

我需要某种方法的“建筑计划”:

public T getVar() {
    return var;
}

public void setVar(T var) {
    this.var = var;
}

public boolean verifyVar() {
    //How would I get the invalid value for each type?
    T invalidValue = ?;
    if (var == invalidValue && inheritor != null) { 
        return inheritor.getVar() != invalidValue;
    } else {
        return var != invalidValue;
    }
}

在上面的示例中:

  
      
  • “Var”或“var”将是变量名称
      和
  •   
  • “T”将是var
  • 的类型   
  • 我不知道怎么会得到无效的值......
  •   

很抱歉,如果我觉得太复杂,我的问题答案很简单。此外,我为可能发生的任何语法错误道歉。

1 个答案:

答案 0 :(得分:0)

对于通用的getter和setter,总是Map<String, Object>,但我很确定这不是你想要的,所以你应该坚持JavaBean约定(如评论中所提到的,任何IDE都会生成这些约定)根据OOP建议,你和它完全有意义。)

任何实现泛型访问器的尝试迟早都会变成某些java.util.Map,并且周围有反射音。如果这就是你想要的,也许你应该重新考虑你的模型,并将类型安全的bean切换到一些自由形式的类型,如map。

对于验证,有javax.validation包(JSR-303)。