如何在不编写“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相关联,正如我在上面的构造函数示例中所演示的那样. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |