我是Java新手,有以下问题:
有没有一种更简单的方法来为每个变量制作方法?
问题背后的含义是:
我是否必须定义一个与其他方法完全相同的方法,只是它们使用不同的变量名和类型?
我认为有同样问题的最常见方法是获取和设置访问器:
它们共享相同的结构,唯一的区别是变量类型和名称。
在我下面的例子中,你需要知道:
- 变量varA-varD只是表示多个类型和名称不同的变量的存在
- 变量"inheritor"是特殊的。我不执行继承,但我do必须验证某个地方,可能是继承人的继承人中的同一变量
- 具有值("!=null";在列表、哈希映射、枚举等情况下)
或- 具有除-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的类型
- 我不知道如何获得无效值
抱歉,我想太复杂了,我的问题有一个简单的答案。此外,对于可能出现的语法错误,我深表歉意。
对于通用的getter和setter,总是有Map<String, Object>
,但我很确定这不是你想要的,所以你应该坚持JavaBean约定(正如评论中提到的,任何IDE都会为你生成这些约定,根据OOP建议来拥有它们是完全有意义的)。
任何实现泛型访问器的尝试迟早都会变成一些带有反射色调的java.util.Map
。如果这是你想要的,也许你应该重新考虑你的模型,并将你的类型安全bean切换到一些自由形式的类型,如map。
对于验证,有javax.validation
包(JSR-303)。