【问题标题】:Is it possible to batch initialize regular variables in Java?是否可以在 Java 中批量初始化常规变量?
【发布时间】:2014-07-26 06:48:00
【问题描述】:

是否可以在循环中批量初始化 Java 中的一些常规变量?这里的“常规”意味着这些变量的初始化方式相同。

例如

Button btn1;
Button btn2;
Button btn3;
Button btn4;

btn1 = new Button(parentComposite, SWT.CHECK);
btn1.setText("Button1");
btn1.setSelection(true);
btn1.setEnabled(true);
btn1.setEnabled(true);
btn1.addSelectionListener(bottonAdapter);

bt2 = new Button(parentComposite, SWT.CHECK);
btn2.setText("Button2");
btn2.setSelection(true);
btn2.setEnabled(true);
btn2.setEnabled(true);
btn2.addSelectionListener(bottonAdapter);

btn3 = new Button(parentComposite, SWT.CHECK);
btn3.setText("Button3");
btn3.setSelection(true);
btn3.setEnabled(true);
btn3.setEnabled(true);
btn3.addSelectionListener(bottonAdapter);

btn4 = new Button(parentComposite, SWT.CHECK);
btn4.setText("Button4");
btn4.setSelection(true);
btn4.setEnabled(true);
btn4.setEnabled(true);
btn4.addSelectionListener(bottonAdapter);

如您所见,4 个按钮的初始化方式完全相同。唯一的区别是变量名称以相同的单词'btn' 开头并以增加的数字结尾。

那么这些按钮可以通过反射或动态代理或其他方式在循环中初始化吗?

【问题讨论】:

    标签: java dynamic reflection initialization


    【解决方案1】:

    最简单的方法就是创建一个方法来做到这一点:

    private Button createButton(String text) {
        Button ret = new Button(parentComposite, SWT.CHECK);
        ret.setText(text);
        ret.setSelection(true);
        ret.setEnabled(true);
        ret.addSelectionListener(buttonAdapter);
    }
    

    然后:

    Button btn1 = createButton("Button1");
    Button btn2 = createButton("Button2");
    Button btn3 = createButton("Button3");
    Button btn4 = createButton("Button4");
    

    如果您希望能够以同质的方式进行进一步处理,您还应该考虑使用一个集合而不是四个单独的变量。然后你可以循环执行:

    List<Button> buttons = new ArrayList<>();
    for (int i = 1; i <= 4; i++) {
        Button button = new Button(parentComposite, SWT.CHECK);
        button.setText("Button" + i);
        button.setSelection(true);
        button.setEnabled(true);
        button.addSelectionListener(buttonAdapter);
        buttons.add(button);
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用数组来初始化这些按钮:

      Button[] buttons = new Button[4];
      
      for(int i =0;i< buttons.length(); i++)
      {
          buttons[i] = new Button(parentComposite, SWT.CHECK);
          buttons[i].setText("Button"+(i+1));
          buttons[i].setSelection(true);
          buttons[i].setEnabled(true);
          buttons[i].addSelectionListener(bottonAdapter)
      }
      

      【讨论】:

        猜你喜欢
        • 2018-02-20
        • 1970-01-01
        • 2011-01-26
        • 1970-01-01
        • 1970-01-01
        • 2014-04-15
        • 1970-01-01
        • 2017-04-05
        • 2020-09-10
        相关资源
        最近更新 更多