加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何在不编写“if语句”的情况下初始化输入字段?

发布时间:2020-12-15 08:40:48 所属栏目:Java 来源:网络整理
导读:我有一个类似的枚举 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.field
我有一个类似的枚举

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方法添加到枚举中.所以
然后你可以遍历数组
您的枚举并调用init
对它的方法,所以枚举知道如何
做自己的初始化
>创建一个Command对象
初始化并创建一个
你的枚举地图作为关键和
命令作为值.周期
围绕运行Command的地图
对于每个枚举.
>使用反射 – 成本明智我不会太担心这一点,除非你的系统处于极低的延迟之后

对于第一个项目符号,您可以更改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相关联,正如我在上面的构造函数示例中所演示的那样.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读