如何在不编写“if语句”的情况下初始化输入字段?
|
我有一个类似的枚举
public enum Field {
A,B,C,D,E ....;
private Field(){
}
}
我有一个类Panel,它使用Field数组初始化字段: public class Panel {
TextBox A;
TextBox B;
TextBox C;
TextBox D;
TextBox E;
...
public Panel(Field[] fields){
this.fields = fields;
init();
}
public void initA(){}
public void initB(){}
public void initC(){}
public void initD(){}
public void initE(){}
}
我的问题是,如何在不编写if语句的情况下初始化给定的字段? 我找不到任何解决方案,我现在正在初始化,如下所示: public void init(){
for(int i = 0 ; i < fields.length; i++){
if(fields[i] == Field.A){
initA();
} else if(fields[i] == Field.B){
initB();
} else if(fields[i] == Field.C){
initC();
} else if(fields[i] == Field.D){
initD();
} else if(fields[i] == Field.E){
initE();
} ....
}
}
解决方法
听起来像你的设计可能需要被关注.一些建议:
>将init方法添加到枚举中.所以 对于第一个项目符号,您可以更改TextBox以保留Field类型,例如 TextBox A = new TextBox(Field.A); TextBox B = new TextBox(Field.B); 因此,如果TextBox知道它是A,E,那么你只需要循环你的Field [],当它找到它的东西时,TextBox运行init代码(可以针对特定的枚举实例存储).当然,您需要在某个地方的数据结构中注册所有TextBox实例,因为您似乎非常反对使用非常广泛使用的反射API. 本质上,Field和TextBox之间必须有一个链接.如果没有你的说法,Java就无法读懂你的想法.好吧,至少在Google推出他们的心灵感应API之前(这可能只适用于Go ……).这可以基于命名(反射),硬编码逻辑(ifs或开关)或基于状态来完成.对于后者,这意味着将Field与TextBox相关联,正如我在上面的构造函数示例中所演示的那样. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
