我是Java的新手并且有以下问题:
是否有更简单的方法为每个变量制作方法?
问题背后的含义是:
我是否必须定义一个与其他方法完全相同的方法,除了它们使用不同的变量名和类型?
我认为具有相同问题的最常见方法是get-和set-accessors:
它们共享相同的结构,唯一的区别是变量类型和名称。
在我的以下示例中,您需要知道:
- 变量varA-varD只表示具有各种类型和名称的多个变量的存在。
- 变量“inheritor”很特别。我不实现继承,但我 DO 必须在某处验证,也许在继承者的继承者中使用相同的变量
- 有一个值(“!= null”;如果是Lists,HashMaps,Enumerations等)
或- 的值不是-2(因为0表示什么都没有,-1表示我的系统中有“无限”,所以我认为使用-2来表示该变量尚未设置,这是一个好主意;万一整数,浮点数,双打等。)。
- 我有验证方法......
醇>
- ...检查变量是否已设置(或不) 因此,代码位于
- ...在setter之外,因为我必须检查变量,即使它们尚未设置。
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
的类型- 我不知道怎么会得到无效的值......
很抱歉,如果我觉得太复杂,我的问题答案很简单。此外,我为可能发生的任何语法错误道歉。
答案 0 :(得分:0)
对于通用的getter和setter,总是Map<String, Object>
,但我很确定这不是你想要的,所以你应该坚持JavaBean约定(如评论中所提到的,任何IDE都会生成这些约定)根据OOP建议,你和它完全有意义。)
任何实现泛型访问器的尝试迟早都会变成某些java.util.Map
,并且周围有反射音。如果这就是你想要的,也许你应该重新考虑你的模型,并将类型安全的bean切换到一些自由形式的类型,如map。
对于验证,有javax.validation
包(JSR-303)。